Break, continue ja exit

Tätä kysyn

Selittäkääs vähän tarkemmin sanojen break, continue ja exit käyttö ja niiden erot.

5

502

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Moikka v^in

      Pienellä yksinkertaisella ohjelmalla se selviää.
      Alla oleva ohjelman pätkä on hyvin yksinkertainen ja pitäisi olla jokaiselle ohjelmoijalle ymmärrettävää. Mutta jos jää kysyttävää niin kysy ihmeessä!

      Luo uusi sovellus. Laita tyhjälle Form:lle Button-, Label- ja kaksi CheckBox-komponenttia.
      Sitten generoit Button-komponentille OnClick tapahtuma jota täydennetään alla olevaksi:


      function testi( breaktesti, exittesti :boolean ):string;
      var
         i : integer;
      begin
         result := '';
         i := 0;
         repeat
            inc( i );
            if i in [ 4..7, 11 ] then continue;
            if exittesti and ( i = 9 ) then exit;
            if breaktesti and ( i = 10 ) then break;
            result := result ' ' IntToStr( i );
         until i > 12;
         while i > 9 do
            begin
               dec( i );
               result := result ' ' IntToStr( i );
            end;
      end;

      procedure TForm1.Button1Click(Sender: TObject);
      var
         s : string;
      begin
         s := testi( CheckBox1.Checked, CheckBox2.Checked );
         Label1.Caption := s;
      end;

      • Näin vain on

        Eräs perujuttu on myös se että käytetään const-sanaa
        aliohjelman tai funktion otsikossa silloin kun
        esitellyn muuttujan arvoa ei aliohjelmassa muuteta.

        Kas näin:

        function testi(const breaktesti,exittesti:boolean):string;


    • suositus

      Onko tämän päivän suosituksena se että silmukasta on monta poistumisreittiä?

      • Delphiguru

        "Onko tämän päivän suosituksena se että silmukasta on monta poistumisreittiä?"

        Itse en ole koskaan suosituksista välittänyt.

        Mutta huolellinen kannattaa silti olla.

        Jos siis silmukasta tms. poistutaan kesken (Break, Continue, exit), niin kannattaa varmistaa, ettei mitään tärkeää jää hoitamatta.

        Oikein käytettynä esim. try - finally - end on varsin pätevä rakenne, ja esim. resurssien vapauttamisen varmistamiseksi hyvä keino.

        Jos ei tuo kelpaa niin 2. vaihtoehto on periyttää luokat vaikkapa TInterfacedObject -luokasta ja sitten määritellä oliomuuttujan sijasta interface -tyyppinen muuttuja, ja laittaa

        TInterfacenToteuttavaOlio.Create:lla luodun olion viite tuohon.

        Kun viimeinen viittaus tuollaiseen poistuu, niin olio tässä tapauksessa vapautetaan automaattisesti ja kokonaisuudessaan heti ( ei siis mene mihinkään roskienkeruulistaan kuten esim. Javassa tapahtuu ).

        Jos et täysin ymmärrä asiaa, teepä näin:

        1. Tee Delphillä pieni testiohjelma

        2. Aja sitä askeltaen läpi Delphin integroidulla debuggerilla.

        3. Askeltaessasi tutki muuttujien arvoja ja tarvittaessa lue myös assemblerkielen tasolla, millaista konekielikoodia Delphi on lähdekoodistasi tuottanut.

        Tällöin opit lisää siitä, miten Delphi toimii "konepellin alla".

        Samalla voit tarkistaa, että esim. muistiviittaukset vapautetaan asianmukaisesti, poistuttiinpa silmukasta tms. millä tavalla tahansa.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Donald Trump joutui ammutuksi vaalitilaisuudessaan

      Näin se näyttää olevan, että Trumpilla on niin kannattajia kuin vastustajiakin. Hengissä käveli pois, ilmeisesti jokin
      Maailman menoa
      626
      6213
    2. Rakastan sua nainen vieläkin

      mut aion pysyy hiljaa 😔
      Ikävä
      72
      3295
    3. Nykynuoret puhuu nolosti englantia suomen sekaan, hävetkää!

      Kamalan kuuloista touhua. Oltiin ravintolassa ja viereen tuli 4 semmosta 20-25v lasta. Kaikki puhui samaan tyyliin. Nolo
      Maailman menoa
      132
      2912
    4. Kova oli pauke!

      Kyllä oli viime yönä kova pauke Iisalmessa. Koko kaupunki taisi herätä ja säikähtää moista pauketta. Eikö tämä riko jo
      Iisalmi
      62
      2092
    5. Kerro kolme hyvää asiaa

      kaivatustasi :)
      Ikävä
      85
      1775
    6. Sitä vielä...

      Että tiedätkö olisiko meidän suhde jotenkin kiellettyä/laitonta?
      Ikävä
      54
      1376
    7. Sunnuntain kirjainleikkejä

      Kuinka monta kirjainta kaivattusi etu- ja sukunimissä on yhteensä? Ap vastaa 11 ja miehen nimi alkaa heheee Jiillä 🧑‍🍳
      Ikävä
      20
      1312
    8. 115
      1308
    9. Pelkään, etten unohda sinua koskaan

      Ja olo jää tällaiseksi. Kuin jotain puuttuisi koko ajan. 💔
      Ikävä
      43
      1211
    10. Luovutetaanko nainen?

      En taida olla sinulle edes hyvän päivän tuttu. Nauratkin pilkallisesti jo selän takana.
      Ikävä
      66
      1102
    Aihe