Les boucles servent à exécuter plusieurs fois une même logique.
Les deux types les plus courants sont la while loop (boucle indéfinie) et la for loop (boucle définie, ou comptée).
Il existe aussi la boucle for each, que l'on verra dans un concept ultérieur.
La for loop se compose d'un en-tête et d'un bloc de code, qui contient le corps de la boucle entre accolades.
L'en-tête se compose de 3 éléments séparés par des points-virgules ; : init-statement, condition, et une autre expression.
Chacun d'eux peut être vide.
for (init-statement; condition; expression) {
some_statement;
}
La while loop exécute son corps tant que sa condition est vraie.
L'extrait de code ci-dessous montre comment transformer une boucle for en boucle while.
init-statement;
while(condition) {
some_statement;
expression;
}
Quand on travaille avec des boucles, il faut souvent ajouter 1 ou retrancher 1 à une variable compteur.
C'est tellement courant que l'opération dispose d'opérateurs dédiés : ++ et --.
Ils existent sous une forme préfixée et une forme postfixée. La forme préfixée modifie la variable avant son utilisation dans l'instruction, et la forme postfixée le fait après. La plupart du temps, tu voudras sans doute la version préfixée.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
L'élément init initialise en général une variable compteur, la condition vérifie si la boucle doit continuer ou s'arrêter, et l'élément post incrémente généralement le compteur à la fin de chaque répétition.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Cette boucle additionne les nombres de 1 à 9 (9 compris).
break et continue
À l'intérieur du corps d'une boucle, tu peux utiliser le mot-clé break pour arrêter complètement l'exécution de la boucle :
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
À l'inverse, le mot-clé continue arrête seulement l'exécution de l'itération en cours et passe à la suivante :
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (n%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Remarque : il est généralement plus facile de comprendre la logique de la boucle quand l'usage de
breaketcontinueest réduit au minimum, voire complètement évité.