Boucle for
Les trois clauses du for, la portée de sa variable, et les deux mots qui le coupent.
Compter est de loin l’usage le plus courant d’une boucle. for le dit en une ligne au lieu de
trois.
@entry(demarrer)
object MonProgramme {
demarrer() {
for (var i := 1; i <= 5; i := i + 1) {
Console.print(text: $"i vaut {i}");
}
}
}
Cinq tours, de 1 à 5.
Trois clauses, séparées par des points-virgules
for (var i := 1; i <= 5; i := i + 1) {
var i := 1— l’initialisation, exécutée une seule fois, avant le premier tour.i <= 5— la condition, testée avant chaque tour, exactement comme celle d’unwhile.i := i + 1— l’avancement, exécuté à la fin de chaque tour.
C’est le while de la sous-section précédente, avec ses trois morceaux rassemblés au même
endroit. Le gain n’est pas la brièveté : c’est qu’on ne peut plus oublier l’avancement, puisqu’il
est écrit dans l’en-tête plutôt que perdu au fond du corps.
La variable du for n’existe que dans la boucle
Essayez de lire i après l’accolade fermante :
error[N001]: unknown name 'i'
Elle est locale au bloc. Elle naît à l’initialisation, meurt à la sortie, et ne peut pas être confondue plus loin avec autre chose. Si vous avez besoin de la valeur après la boucle, c’est qu’il faut une variable déclarée avant elle.
continue saute un tour, break sort
Deux mots coupent le cours d’une boucle — de n’importe laquelle, while compris.
@entry(demarrer)
object MonProgramme {
demarrer() {
for (var i := 1; i <= 10; i := i + 1) {
if (i % 2 = 0) {
continue;
}
if (i > 7) {
break;
}
Console.print(text: $"i vaut {i}");
}
Console.print(text: "terminé");
}
}
La boucle va jusqu’à 10 ; la sortie s’arrête à 7, et ne montre que des impairs.
continue abandonne le tour en cours et passe directement au suivant — l’avancement est
quand même exécuté. Ici, if (i % 2 = 0) { continue; } saute tous les nombres pairs.
break sort de la boucle sur-le-champ, sans avancement ni nouveau test. Ici, i valant 9,
la condition i > 7 est vraie : la boucle s’arrête et le programme reprend à la ligne d’après —
d’où le terminé.
Ni l’un ni l’autre ne porte d’étiquette. break sort de la boucle la plus proche, jamais
d’une boucle extérieure. Deux boucles imbriquées se quittent donc l’une après l’autre, ou par une
condition qu’on écrit — pas par un saut.
À vous
- Comptez à l’envers —
for (var i := 5; i >= 1; i := i - 1)— et vérifiez que les trois clauses vous laissent libre du sens. - Lisez
iaprès la boucle, juste pour voir le refus. - Dans le second exemple, retirez le
break: les impairs vont jusqu’à 9. - Retirez plutôt le
continue: les pairs reviennent, et c’est 8 qui déclenche la sortie.