Oppimateriaalin copyright © 2011 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 28.3.2011)

Ehdolliset toistot

Ehdolliset toistolauseet tulivat ohjelmointiin "rakenteisen ohjelmoinnin" myötä. Algol-W esitteli 70-luvun alussa muodon
    while toistoehto 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 toistoehto do   repeat              TAI    do
    lause                 lause                      lause
                        until lopetusehto          while toistoehto

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.