Načrtovanje in razvoj spletnih aplikacij

Zanka DO...WHILE

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);
?>
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...while uporabljamo 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 break in continue uporabljamo 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...while vedno 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 break se uporabi na mestu, kjer logika zanke postane manj pregledna.
  • Za primer, kjer bi bila primernejša zanka while, se uporabi zanka do...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.