§ Boucles
instructions une par suite
Je ne connais pas l’expression. "Une après l’autre" peut-être?
do while
peut se traduire par "répéter … tant que" – attention au piège p/r aux langages qui "répètent jusqu’à"
exo des saisies
on va plutôt préférer l’écriture canonique qui est while (! (flux >> donnee))
Mais ne trouvez-vous pas ça dommage de créer des variables spécifiques à nos boucles, type compteur, juste pour elles ?
La formulation est bizarre. Si on doit compter, on n’a pas le choix, on va avoir besoin d’un compteur. Je me demande d’ailleurs s’il n’y a pas un papier pour avoir while (init-statement ; cond)
à partir du C++20.
Pour l’équivalence, c’est
{ init ;
while (cond) { action; iter; }
}
BTW, dans le cas de for
, la 3e clause est plus une clause d’itération, pas nécessairement d’incrémentation.
L’avantage, n’est pas sans me rappeler le SRP: on réunit au même endroit tout ce qui participe à une itération. Dans le cas de while, on va être plus générique on boucle.
Cette possibilité est cependant à prendre avec des gants parce qu’elle peut rendre le code très peu lisible.
Une bonne solution est de mettre chaque clause sur une ligne différente. While ne simplifie rien: la complexité est la même. Je dirai de choisir par rapport à ce que l’on veut exprimer donc: for pour itérer (la quantité d’itérations n’est pas forcément connue pour les listes en extensions avec la STL2/ranges v3), while pour réaliser un traitement autant de fois que nécessaire (c’est plus flou et générique).
Il faudrait traiter des for-range loop en C++ aujourd’hui.
vous ne verrez jamais affiché
afficher
Dans le cas de boucles imbriquées, break ne stoppe l’exécution que de la boucle dans laquelle il se trouve, mais pas les boucles englobantes.
Cela me rappelle pas mal de posts de débutants dans les forums qui croient que if
est une boucle. Tous sont des structures de contrôle, if
une structure (?) de saut conditionnel, les autres des boucles. Faut-il le rappeler pour les lecteurs distraits?
La difficulté avec break et continue, c’est qu’il faut rapidement parler de qualité: quand pouvons nous ou pas utiliser ces instructions? La discussion peut vite dévier vers l’écriture de fonctions dédiées plutôt que de boucles avec positionnement de flag trouvé. Et du coup, il faudrait même dire qu’un for/while + break, c’est souvent un std::find_if()
qui s’ignore…