Break, continue ja exit

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

Muut lukivat myös

Vastaukset 5

Vanhimmat

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;

Äänestä
  • 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;

    Äänestä

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

Äänestä
  • "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.

    Äänestä

Kommentoi aloitusta


Tätä kysyn kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu