torna alle lezioni

Quali valori mostrerà il ciclo while?

importanza: 4

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?

  1. La forma prefissa ++i:

    let i = 0;
    while (++i < 5) alert( i );
  2. 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.

  1. Da 1 a 4

    let i = 0;
    while (++i < 5) alert( i );

    Il primo valore è i = 1, perchè ++i incrementa prima i e poi ritorna il nuovo valore. Quindi il primo confronto è 1 < 5 e alert mostra 1.

    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 a 5, il confronto while(5 < 5) risulta false, e il ciclo termina. 5 non viene mostrato.

  2. Da 1 a 5

    let i = 0;
    while (i++ < 5) alert( i );

    Il primo valore è ancora i = 1. La forma postfissa i++ incrementa i e ritorna il vecchio valore, quindi il confronto i++ < 5 utilizza i = 0 (a differenza di ++i < 5).

    La chiamata ad alert è separata. E’ un istruzione che viene eseguita dopo l’incremento di i e il controllo della condizione. Quindi i = 1.

    Seguono 2, 3, 4…

    Fermiamoci a i = 4. La forma prefissa ++i incrementerebbe ed utilizzerebbe 5 nel controllo della condizione i < 5. Qui però stiamo usando la forma postfissa i++. Quindi incrementa ia 5, ma ritorna il vecchio valore. Il confronto è dunque while(4 < 5) – vero; il controllo passa alla chiamata alert.

    Il valore i = 5 è l’ultimo, perchè nell’iterazione successiva avremmo while(5 < 5) e la condizione sarebbe falsa.