ProgrammationDéveloppeur VB.NET

Comment le cycle Do...Loop est-il implémenté en Visual Basic, quelles sont les variantes de sa syntaxe et dans quels cas doit-on utiliser ce cycle plutôt que For ou While ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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 :

  • Le nombre exact d'itérations est inconnu
  • La condition de sortie dépend des actions internes de la boucle (par exemple, lecture à partir d'un fichier ou d'une console)

Question piège.

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.

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet.


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 puisque EndOfStream devient 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 : utiliser Do While Not reader.EndOfStream ou 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...Loop sans tenir compte de l'imbrication des conditions Exit Do : le Exit Do inté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.