Zanka do...while je podobna zanki while, vendar se pogoj preveri šele na koncu ponovitve. Zato se telo zanke do...while vedno izvede vsaj enkrat.
Ta zanka je primerna takrat, ko želimo, da se določen del kode izvede najmanj enkrat, šele nato pa se odloča o nadaljnjih ponovitvah.
Pomni: Glavna značilnost zanke do...while je, da se njeno telo izvede vsaj enkrat, tudi če je pogoj že na začetku neresničen.
Osnovna pravila
Osnovna oblika zanke do...while je:
do {
// koda, ki se izvede vsaj enkrat
} while (pogoj);
- telo zanke se izvede pred preverjanjem pogoja,
- pogoj se preveri na koncu vsake ponovitve,
- če je pogoj resničen, se zanka ponovi,
- če je pogoj neresničen, se zanka konča.
Pozor: Ker se pogoj preveri šele na koncu, se zanka do...while izvede tudi takrat, ko je pogoj že ob začetku neresničen.
Primer ene ponovitve
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
Ta zanka se izvede natanko enkrat. Najprej se izvede ukaz echo $i;, šele nato se preveri pogoj $i > 0. Ker je pogoj neresničen, se zanka po prvi ponovitvi konča.
Pomni: Zanka do...while ni primerna samo za več ponovitev, temveč tudi za primere, ko želimo zagotoviti vsaj eno izvedbo kode.
Primer več ponovitev
<?php
$i = 1;
do {
echo $i . " ";
$i++;
} while ($i <= 5);
?>
V tem primeru se izpišejo števila od 1 do 5. Po vsaki ponovitvi se vrednost $i poveča, nato pa se preveri pogoj za naslednjo ponovitev.
Ukaz break
Tudi v zanki do...while lahko uporabimo ukaz break, s katerim zanko predčasno prekinemo.
<?php
$i = 1;
do {
if ($i === 4) {
break;
}
echo $i . " ";
$i++;
} while ($i <= 10);
?>
V tem primeru se zanka ustavi, ko vrednost $i postane 4.
Pozor: Ukaz break takoj prekine izvajanje zanke, ne glede na zapisani pogoj na koncu.
Ukaz continue
V zanki do...while lahko uporabimo tudi ukaz continue. Ta preskoči preostanek trenutne ponovitve in nadaljuje z naslednjim preverjanjem pogoja.
<?php
$i = 0;
do {
$i++;
if ($i === 3) {
continue;
}
echo $i . " ";
} while ($i < 5);
?>
V tem primeru se število 3 ne izpiše, ker se pri tej ponovitvi preostanek kode preskoči.
Pomni: Ukaz continue ne konča zanke, ampak preskoči le preostanek trenutne ponovitve.
Primerjava: while in do...while
| Lastnost | while |
do...while |
|---|---|---|
| Mesto preverjanja pogoja | na začetku | na koncu |
| Najmanjše število izvedb | 0 | 1 |
| Primerna uporaba | ko se zanka morda sploh ne izvede | ko se mora zanka izvesti vsaj enkrat |
Pomni: Če mora biti koda izvedena vsaj enkrat, je zanka do...while praviloma ustreznejša od zanke while.
Kdaj uporabimo do...while
Zanko do...while uporabimo takrat, ko želimo, da se telo zanke izvede vsaj enkrat, ne glede na začetno vrednost pogoja. Tak primer je lahko prikaz menija, obdelava vnosa ali ponavljanje dejanja, ki mora biti izvedeno vsaj enkrat.
Priporočila
- Zanko
do...whileuporabljamo takrat, ko je najmanj ena izvedba nujna. - Pogoj na koncu zanke naj bo jasen in pregleden.
- V telesu zanke naj bo poskrbljeno za spremembo spremenljivk, ki vplivajo na pogoj.
- Ukaza
breakincontinueuporabljamo premišljeno. - Za primere, kjer prva izvedba ni nujna, pogosto raje uporabimo zanko
while.
Pozor: Če v zanki ne spreminjamo vrednosti, od katerih je odvisen pogoj, lahko nastane neskončna zanka.
Pogoste napake
- Pričakuje se, da se zanka ne bo izvedla, čeprav se telo zanke
do...whilevedno izvede vsaj enkrat. - Pogoj na koncu zanke ni pravilno zapisan.
- Spremenljivka, ki vpliva na pogoj, se v zanki ne spremeni, zato se zanka ne konča.
- Ukaz
breakse uporabi na mestu, kjer logika zanke postane manj pregledna. - Za primer, kjer bi bila primernejša zanka
while, se uporabi zankado...while.
Pozor: Najpogostejša posebnost zanke do...while je prav to, da se vedno izvede vsaj enkrat. To je hkrati njena prednost in pogost vir napak.
Sklep
Zanka do...while je uporabna takrat, ko mora biti telo zanke izvedeno najmanj enkrat. Njena glavna posebnost je preverjanje pogoja na koncu, zato se razlikuje od zanke while. Pri uporabi moramo paziti na jasno zapisan pogoj, pravilno spreminjanje spremenljivk in premišljeno uporabo ukazov break ter continue.