Quelles valeurs affiche la boucle while ?
A votre avis, quelles sont les valeurs affichées pour chaque boucle ? Notez-les puis comparer avec la réponse.
Les deux boucles affichent-elles les mêmes valeurs dans l’alert ou pas ?
-
Le préfixe sous forme
++i:let i = 0; while (++i < 5) alert( i ); -
Le postfixe sous forme
i++:let i = 0; while (i++ < 5) alert( i );
L’exercice montre comment les formes postfix/prefix peuvent conduire à des résultats différents lorsqu’ils sont utilisés dans des comparaisons.
-
De 1 à 4
let i = 0; while (++i < 5) alert( i );La première valeur est
i=1, parce que++iincrémente d’abordipuis renvoie la nouvelle valeur. La première comparaison est donc1 < 5etalertindique1.Ensuite, viennent
2,3,4…– les valeurs apparaissent les unes après les autres. La comparaison utilise toujours la valeur incrémentée, car++est avant la variable.Enfin,
i=4est incrémenté à5, la comparaisonwhile(5 < 5)échoue et la boucle s’arrête. Donc5n’est pas affiché. -
De 1 à 5
let i = 0; while (i++ < 5) alert( i );La première valeur est encore
i=1. La forme postfixée dei++incrémenteipuis renvoie l’ancienne valeur, la comparaisoni++ < 5utilisera donci=0(contrairement à++i < 5).Mais l’appel d’
alertest séparé. C’est une autre instruction qui s’exécute après l’incrémentation et la comparaison. Donc, on obtienti=1.Ensuite viennent
2,3,4…Arrêtons-nous sur
i=4. Le préfixe sous forme++il’incrémenterait et utiliserait5dans la comparaison. Mais ici nous avons la forme postfixéei++. Donc,iaugmente à5, mais renvoie l’ancienne valeur. Par conséquent, la comparaison est en réalitéwhile(4 < 5)– true, et le contrôle continue àalert.La valeur
i=5est la dernière, car à l’étape suivantewhile(5 <5)est faux.