Oppimateriaalin copyright © 2007 Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.
(Muutettu viimeksi 29.1.2007)

Ehdolliset toistot

Ehdolliset toistolauseet tulivat ohjelmointiin "rakenteisen ohjelmoinnin" myötä. Algol-W esitteli 70-luvun alussa muodon
    while ehto do
      lause
Pascal ym. kielet jäljittelivät ideaa.

Perinteisesti toistot oli ohjelmoitu hyppykäskyin tyyliin

10: if not ehto goto 20;
    lause;
    goto 10;
20:
Tämä tyyli tarjosi mahdollisuuden "vaikka mihin", ja oikeutetusti alettiin huolestua ohjelmien oikean toiminnan varmistamisesta. Esimerkki:
10: if ehto1 goto 20;
    lause1;
15: if ehto2 goto 30;
20: lause2;
    if ehto4 goto 40;
    lause3;
    goto 10;
30: lause4;
    if ehto5 goto 20;
40: ...

Ehdollisilla toistolauseilla on kaksi tyypillistä muotoa, alkuehtoinen ja loppuehtoinen:

  while ehto do       repeat         TAI    do
    lause               lause                 lause
                      until ehto            while ehto

Toisinaan algoritmin logikka on selvimmin ilmaistavissa ns. "puolitoistakertaisella luupilla", toistorakenteella, joka voidaan lopettaa keskellä toistettavaa alialgoritmia. Keksittiin rakenteita, joissa toistettavan alialgoritmin voi lopettaa muuallakin kuin vain alussa tai lopussa, tyyliin:

  loop                       // alkuehtoinen          // loppuehtoinen
    lause1;                  loop                     loop
  when ehto1 exit;           when ehto exit;            lause;
    lause2;                    lause;                 when ehto exit;
  when ehto2 exit;           end_loop                 end_loop
    lause3;
    ...
  end_loop

Vertaa Javan rakenteeseen:

  while (true) {
    lause1;
    if ehto1 break;
    lause2;
    if ehto2 break;
    lause3;
  }
Myös yhden toistokerran keskeyttäminen ja toistotasojen ylittäminen keskeyttämisessä tai koko toiston lopettamisessa on mahdollista joissakin kielissä. Esim. Javassa:
  ulompi: while (ehto1) {
              ...
     sisempi: while (ehto2) {
                 ...
                 if (ehto3)  break sisempi;
                 ...
                 if (ehto4) continue ulompi;
                 ...
              } // sisempi loppuu
              ...
          } // ulompi loppuu


Takaisin sisältösivulle.