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

558

    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. Hengenvaaralliset kiihdytysajot päättyivät karmealla tavalla, kilpailija kuoli

      Onnettomuudesta on aloitettu selvitys. Tapahtuma keskeytettiin onnettomuuteen. Tapahtumaa tutkitaan paikan päällä yhtei
      Kauhava
      198
      6908
    2. Ootko rakastunut?

      Kerro pois nyt
      Ikävä
      159
      2036
    3. Onhan sulla nainen parempi mieli

      Nyt? Ainakin toivon niin.
      Ikävä
      113
      1688
    4. Ujosteletko tosissaan vai mitä oikeen

      Himmailet???? Mitä pelkäät?????
      Ikävä
      51
      1390
    5. Suureksi onneksesi on myönnettävä

      Että olen nyt sitten mennyt rakastumaan sinuun. Ei tässä mitään, olen kärsivällinen ❤️
      Ikävä
      55
      1238
    6. Möykkähulluus vaati kuolonuhrin

      Nuori elämä menettiin täysin turhaan tällä järjettömyydellä! Toivottavasti näitä ei enää koskaan nähdä Kauhavalla! 😢
      Kauhava
      50
      1098
    7. Älä mies pidä mua pettäjänä

      En petä ketään. Älä mies ajattele niin. Anteeksi että ihastuin suhun varattuna. Pettänyt en ole koskaan ketään vaikka hu
      Ikävä
      100
      1074
    8. Reeniähororeeniä

      Helvetillisen vaikeaa työskennellä hoitajana,kun ei kestä silmissään yhtään läskiä. Saati hoitaa sellaista. Mitä tehdä?
      Kouvola
      7
      996
    9. Tarvitsemme lisää maahanmuuttoa.

      Väestö eläköityy, eli tarvitsemme lisää tekeviä käsiä ja veronmaksajia. Ainut ratkaisu löytyy maahanmuutosta. Nimenomaan
      Maailman menoa
      251
      954
    10. Kävit nainen näemmä mun

      Facessa katsomassa....
      Ikävä
      41
      929
    Aihe