JavaScript díl 11, cykly

« zpět na JavaScript

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

Nezávazně vyzkoušejte webové stránky zdarma

Klientská sekce pro Vás

Spravujte své domény a hosting pohodlně 24 hodin denně

Kontakt pro zákazníky

Technická podpora

PO-PÁ 8:00-21:00
SO-NE, svátky 9:00-21:00

E-mail: podpora@banan.cz

Online pracovník

Patrik Jankov

+420 553 810 250

Online chat

Zvládáme opensource

Na našich serverech jsme ručně ověřili funkci více než 140 opensource systémů, některé z nich nabízíme na jedno kliknutí v administraci.

Hostované domény

7921 domén 6598 1323

Poslední článek - HOMEPAGE PRVKY

O
Ověřit dostupnost domény
Technická podpora: +420 553 810 250podpora@banan.cz
Technická podpora 800-2100 (SO-NE 900-2100) X
Online pracovník: Patrik Jankov
+420 553 810 250
podpora@banan.cz nebo Online chat
Kontaktovat technickou podporu můžete zde
Kontaktovat technickou podporu můžete zde
PO-PÁ 800-2100 (víkendy a svátky 900-2100)