ProgrammazioneSviluppatore VB.NET

Come viene implementato il ciclo Do...Loop in Visual Basic, quali sono le varie forme della sua sintassi e in quali casi è opportuno utilizzare proprio questo ciclo invece di For o While?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

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:

  • Il numero esatto di iterazioni non è noto
  • La condizione di uscita dipende dalle azioni interne del ciclo (ad esempio, lettura da un file o da console)

Domanda ingannevole.

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.

Esempi di errori reali causati dalla mancanza di conoscenze sui dettagli dell'argomento.


Storia

Nella fase di parsing dei dati, lo sviluppatore ha utilizzato il ciclo Do Until reader.EndOfStream all'interno del quale veniva chiamata la lettura della riga dal file. Tuttavia, poiché EndOfStream diventa vero solo dopo il tentativo di lettura oltre il fine file, l'ultima riga non è stata elaborata. Il modo corretto: utilizzare Do While Not reader.EndOfStream o 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...Loop senza tenere conto della nidificazione delle condizioni Exit Do: il Exit Do interno usciva solo dal ciclo interno, non da entrambi. Un bug bloccante temporaneo è stato rilevato solo in produzione con grandi volumi di dati.