Quali valori mostrerà il ciclo while?
Per ogni iterazione del ciclo, scrivi quali valori verranno mostrati e poi confrontali con la soluzione.
Entrambi i cicli mostreranno gli stessi valori in alert
, o no?
-
La forma prefissa
++i
:let i = 0; while (++i < 5) alert( i );
-
La forma postfissa
i++
let i = 0; while (i++ < 5) alert( i );
L’esercizio dimostrava come le forme prefissa/postfissa possono portare a risultati differenti.
-
Da 1 a 4
let i = 0; while (++i < 5) alert( i );
Il primo valore è
i = 1
, perchè++i
incrementa primai
e poi ritorna il nuovo valore. Quindi il primo confronto è1 < 5
ealert
mostra1
.Poi seguono
2, 3, 4…
– i valori vengono mostrati uno dopo l’altro. Il confronto utilizza sempre il valore incrementato, perchè++
è posto prima della variabile.Ultima iterazione,
i = 4
viene incrementato a5
, il confrontowhile(5 < 5)
risultafalse
, e il ciclo termina.5
non viene mostrato. -
Da 1 a 5
let i = 0; while (i++ < 5) alert( i );
Il primo valore è ancora
i = 1
. La forma postfissai++
incrementai
e ritorna il vecchio valore, quindi il confrontoi++ < 5
utilizzai = 0
(a differenza di++i < 5
).La chiamata ad
alert
è separata. E’ un istruzione che viene eseguita dopo l’incremento dii
e il controllo della condizione. Quindii = 1
.Seguono
2, 3, 4…
Fermiamoci a
i = 4
. La forma prefissa++i
incrementerebbe ed utilizzerebbe5
nel controllo della condizionei < 5
. Qui però stiamo usando la forma postfissai++
. Quindi incrementai
a5
, ma ritorna il vecchio valore. Il confronto è dunquewhile(4 < 5)
– vero; il controllo passa alla chiamataalert
.Il valore
i = 5
è l’ultimo, perchè nell’iterazione successiva avremmowhile(5 < 5)
e la condizione sarebbe falsa.