Které hodnoty zobrazí cyklus while?
Pro oba cykly si zapište hodnoty, které budou vypsány, a pak je porovnejte s řešením.
Vypíše alert v obou cyklech stejné hodnoty, nebo ne?
-
Prefixová notace
++i:let i = 0; while (++i < 5) alert( i ); -
Postfixová notace
i++let i = 0; while (i++ < 5) alert( i );
Tato úloha ukazuje, jak může prefixová a postfixová notace vést k rozdílným výsledkům, když je použijeme v porovnání.
-
Od 1 do 4
let i = 0; while (++i < 5) alert( i );První hodnota je
i = 1, jelikož++inejprve zvýšíia pak vrátí novou hodnotu. První porovnání je tedy1 < 5aalertzobrazí1.Následují
2, 3, 4…– hodnoty se zobrazí jedna po druhé. Porovnání se vždy dívá na zvýšenou hodnotu, protože++je před proměnnou.Nakonec
i = 4se zvýší na5, porovnáníwhile(5 < 5)neuspěje a cyklus skončí. Takže5se nezobrazí. -
Od 1 do 5
let i = 0; while (i++ < 5) alert( i );První hodnota je opět
i = 1. Postfixová notacei++zvýšíia pak vrátí starou hodnotu, takže porovnáníi++ < 5se dívá nai = 0(na rozdíl od++i < 5).Avšak
alertse volá odděleně. Je to další příkaz, který se spustí až po zvýšení a porovnání. Proto obdrží aktuálníi = 1.Následují
2, 3, 4…Zastavme se u
i = 4. Prefixová notace++iby je zvýšila a v porovnání by použila5. Tady však máme postfixovou notacii++. Ta zvýšíina5, ale vrátí starou hodnotu. Proto se provede porovnáníwhile(4 < 5)– pravda, tudíž řízení přejde kalert.Hodnota
i = 5je poslední, jelikož další krokwhile(5 < 5)dává nepravdu.