Opět si povíme něco o cyklech, tentokrát především o while a do while a někonečných smyčkách.
V minulém díle jsme se seznámili s cyklem for který měl přesný počet opakování. Cykly while a do while mají proměnný počet opakování, to znamená, že reagují na události uvnitř těla cyklu.V čem se liší while od do while?
Cyklus while má podmínku na konci výrazu, kdežto do while na začátku. Bystřejší se už možná dovtípili, že hlavní rozdíl je, že cyklus while proběhne minimálně jednou a to bez ohledu na stav podmínky.
While
Syntaxe cyklu while: while (podminka_ukonceni_cyklu) {
...zpracovávané výrazy...
}
Slovy: Výrazy uvnitř bloku se budou zpracovávat pokud podmínka bude pravda (True, 1)
Příklad 1:
Jednoduchá ukázka počítání od 2 do 4
var i=2;
while (i<5) {
document.write("Pravě proběhla iterace číslo: " + i + "<br>");
i++;
}
Slovy: Dokud (while) bude podmínka pravda (True, 1), zpracovávej výrazy uvnitř bloku.
Podmínka "i<5" lze zapsat také jako "i<=4"
výsledek bude:
Pravě proběhla iterace číslo: 2
Pravě proběhla iterace číslo: 3
Pravě proběhla iterace číslo: 4
do ... while
Syntaxe cyklu do while:
do {
...zpracovávané výrazy...
} while (podminka_ukonceni_cyklu)
Slovy: Zpracovávej výrazy uvnitř bloku (do), dokud (while) bude podmínka pravda (True, 1)
Příklad 2:
Opět jednoduchá ukázka:
var i=2;
do {
document.write("Pravě proběhla iterace číslo: " + i + "<br>");
i++;
} while (i<5)
Výsledek bude:
Pravě proběhla iterace číslo: 0
Pravě proběhla iterace číslo: 1
Pravě proběhla iterace číslo: 2
Pravě proběhla iterace číslo: 3
Pravě proběhla iterace číslo: 4
Pojmenované cykly:
Zvláště i více v sobě vnořených cyklech se dají s výhodou použít pojmenované cykly. Pokud máme cyklus pojmenovaný můžeme na něj totiž ukázat prostřednictvím příkazu break nebo continue a tím zasáhnout pouze jej.Syntaxe:
jmeno_cyklu:
cyklus
Příklad 3:
Pro názornost si ukážeme jen jak pojmenované cykly vytvořit. Ukázka bude trivální, protože půjde o obyčejnou tabulku čísel:
vnejsi:for (i=0; i<5; i++){
vnitrni:
for (j=8; j<20; i++){
if (j==10) {
break vnejsi;
}
else {
continue vnitrni;
}
}
}
U předchazejiciho kodu si všimňěte hlavně pojmenování cyklu (vnejsi a vnitrni"). Příkaz break má označeno že má ukončit vnější cyklus, což znamená že skončí oba cykly. Příklad není úplně typický, jde pouze o ukázku pojmenování.
Nekonečné smyčky
Nekonečná smyčka je většinou chyba programu, která je způsobena tím, že program nedoběhne nikdy do ukončovací podmínky. Takováto neošetřená smyčka obvykle v programech může způsobit zaseknutí PC, proto by vždy měla mít nekonečná smyčka nějakou možnost z cyklu vyskočit (break). Uvedu několik příkazů jak se dá vytvořit nekonečná smyčka:Příklad 4:
for (i=0;i>=0;i++) {...}
Dojde zacyklení, protože u cyklu je vždy splněna podmínka.
Příklad 5:
for (;;) {...}
Není sice uvedena žádná podmínka ani výchozí hodnota, cyklus však neustále pracuje. Iterační proměnná je nedefinovaná.
Příklad 6:
while (True) {...}
Protože cykly trvají do doby dokuj je podmínka "pravda" a v tomto případě to bude vždy, bude cyklus pokračovat do nekonečna.
Příklad 7:
do {...}
while (1)
Podobně jako v předchozím příkladě, místo True je však použita 1 což je alternativa k true (pravda)
Příklad 8:
for (i=0;i<=10;i++) {...
i=i-1;
...
}
Při každém průchodu skriptu se zvýší o 1, ale podle těla cyklu opět sníží iterační proměnná o 1, výsledkem je že se cyklus pohybuje stále na stejném místě, tudíž cykluje do nekonečna.
Příklad 9:
var i=1;
while (1) {
pokracovat=prompt("Prave jsem v iteraci " + i + " mam pokračovat? (ano/ne) ", "ano")
if (pokracovat!="ano"){
break;
}
document.write("Pravě jste souhlasil s iterací číslo: " + i + "<br>");
i++;
}
Tato nekonečná smyčka vyvolá v každé iteraci dialog s otázkou a předvyplněnou odpovědí "ano", pokud bude odpověď jiná, nekonečná smyčka se ukončí. Pokud se neukončí vypíše na stránku informaci, že jsem souhlasil s pokračováním.
Nekonečné cykly obvykle zachytí watchdog prohlížeče a zeptá se vás zda chcete pokračovat ve zpracovávání nekonečného skriptu.
Cykly "for ... in" a "for each" si popíšeme později, až budeme mít popsán objekt a programování s objekty.
Autor: Martin