Il ciclo Do...Loop consente di organizzare la ripetizione di un blocco di codice con condizioni di terminazione più flessibili rispetto a For (che è orientato a un contatore) o While (dove la condizione viene sempre verificata all'ingresso). In Visual Basic ci sono quattro varianti principali di registrazione:
' Verifica all'ingresso Do While condition ' Corpo del ciclo Loop ' Verifica all'uscita Do ' Corpo del ciclo Loop While condition ' Analogamente con Until: Do Until condition ' Corpo del ciclo Loop Do ' Corpo del ciclo Loop Until condition
È meglio utilizzare Do...Loop se:
Domanda: Cosa succederà se all'interno del ciclo Do While condition la condizione condition è inizialmente falsa? Verrà eseguito almeno un corpo del ciclo?
Risposta: No, il corpo del ciclo non verrà eseguito affatto, poiché il controllo avviene PRIMA dell'esecuzione.
Esempio:
Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' Non verrà stampata alcuna riga.
Storia
Nella fase di parsing dei dati, lo sviluppatore ha utilizzato il ciclo
Do Until reader.EndOfStreamall'interno del quale veniva chiamata la lettura della riga dal file. Tuttavia, poichéEndOfStreamdiventa vero solo dopo il tentativo di lettura oltre il fine file, l'ultima riga non è stata elaborata. Il modo corretto: utilizzareDo While Not reader.EndOfStreamo elaborare la lettura riga per riga e terminare il ciclo in base alla condizione EOF.
Storia
Durante la migrazione del codice da For a Do...Loop, è stato implementato un ciclo senza un'incrementazione esplicita della variabile contatore all'interno del corpo. Di conseguenza, il programma è entrato in un ciclo infinito, poiché la condizione di terminazione non si è mai verificata. È sempre necessario controllare le modifiche delle variabili chiave all'interno del corpo Do...Loop.
Storia
In uno dei sottosistemi di reporting, un programmatore ha utilizzato cicli annidati
Do...Loopsenza tenere conto della nidificazione delle condizioniExit Do: ilExit Dointerno usciva solo dal ciclo interno, non da entrambi. Un bug bloccante temporaneo è stato rilevato solo in produzione con grandi volumi di dati.