Le cycle Do...Loop permet d'organiser la répétition d'un bloc de code avec des conditions de terminaison plus flexibles que For (qui est basé sur un compteur) ou While (où la condition est toujours vérifiée à l'entrée). En Visual Basic, il existe quatre variantes principales d'écriture :
' Vérification à l'entrée Do While condition ' Corps de la boucle Loop ' Vérification à la sortie Do ' Corps de la boucle Loop While condition ' De même avec Until : Do Until condition ' Corps de la boucle Loop Do ' Corps de la boucle Loop Until condition
Il est conseillé d'utiliser Do...Loop si :
Question : Que se passe-t-il si la condition condition est initialement fausse à l'intérieur de la boucle Do While condition ? Le corps de la boucle sera-t-il exécuté au moins une fois ?
Réponse : Non, le corps de la boucle ne sera pas exécuté du tout, car la vérification se fait AVANT la première exécution.
Exemple :
Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' Aucune ligne ne sera affichée.
Histoire
Lors de l'analyse des données, le développeur a utilisé la boucle
Do Until reader.EndOfStream, à l'intérieur de laquelle il appelait la lecture d'une ligne à partir d'un fichier. Mais puisqueEndOfStreamdevient vrai uniquement après une tentative de lecture au-delà de la fin du fichier, la dernière ligne n'a pas été traitée. La bonne méthode : utiliserDo While Not reader.EndOfStreamou traiter la lecture ligne par ligne et terminer la boucle sur la condition EOF.
Histoire
Lors de la migration du code de For à Do...Loop, une boucle a été réalisée sans incrémentation explicite de la variable compteur à l'intérieur du corps. En conséquence, le programme est passé dans une boucle infinie, car la condition de terminaison ne se produisait jamais. Il est toujours nécessaire de contrôler le changement des variables clés à l'intérieur du corps de Do...Loop.
Histoire
Dans l'un des sous-systèmes de reporting, le programmeur a utilisé des boucles imbriquées
Do...Loopsans tenir compte de l'imbrication des conditionsExit Do: leExit Dointérieur ne sortait que de la boucle intérieure, et non des deux. Un bug bloquant temporaire n'a été découvert que lors de l'exécution avec de grands volumes de données.