Condividi tramite


Istruzione Do...Loop (Visual Basic)

Consente di ripetere un blocco di istruzioni fino a quando una condizione Boolean resta True o non diventa True.

Do { While | Until } condition
    [ statements ]
    [ Continue Do ]
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop
-or-
Do
    [ statements ]
    [ Continue Do ]
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop { While | Until } condition

Parti

Termine

Definizione

Do

Necessario. Consente di avviare la definizione del ciclo Do.

While

Obbligatoria a meno che non venga utilizzato Until. Ripetere il ciclo finché condition è False.

Until

Obbligatoria a meno che non venga utilizzato While. Ripetere il ciclo finché condition è True.

condition

Opzionale. Espressione Boolean. Se la condition è Nothing, Visual Basic la considera False.

statements

Opzionale. Una o più istruzioni ripetute finché la valutazione di condition resta o non diventa True.

Continue Do

Opzionale. Trasferisce il controllo all'iterazione successiva del ciclo Do.

Exit Do

Opzionale. Trasferisce il controllo al di fuori del ciclo Do.

Loop

Necessario. Consente di terminare la definizione del ciclo Do.

Note

Utilizzare una struttura Do...Loop per ripetere un insieme di istruzioni un numero indefinito di volte, finché non viene soddisfatta una condizione. Se si desidera ripetere le istruzioni un numero determinato di volte, in genere è più indicata l'istruzione For...Next.

È possibile utilizzare While o Until per specificare il parametro condition, ma non entrambi.

È possibile testare l'espressione condition soltanto una volta, all'inizio o alla fine del ciclo. Se si esegue il test di condition all'inizio del ciclo (nell'istruzione Do), è possibile che il ciclo non venga eseguito nemmeno una volta. Se si esegue il test alla fine del ciclo (nell'istruzione Loop), il ciclo viene sempre eseguito almeno una volta.

La condizione è in genere il risultato di un confronto tra due valori, ma può anche essere una qualsiasi espressione che restituisca un valore Tipo di dati Boolean (Visual Basic) (True o False). Sono compresi i valori di altri tipi di dati, come i tipi numerici, convertiti in Boolean.

È possibile annidare cicli Do inserendo un ciclo all'interno dell'altro. È inoltre possibile annidare strutture di controllo di tipo diverso inserendole una all'interno dell'altra. Per ulteriori informazioni, vedere Strutture di controllo annidate (Visual Basic).

Nota

La struttura Do...Loop offre maggiore flessibilità rispetto alla struttura Istruzione While...End While (Visual Basic) in quanto consente di decidere se terminare il ciclo nel momento in cui il valore di condition non è più True oppure quando diventa True per la prima volta.La struttura consente inoltre di verificare la condition all'inizio o alla fine del ciclo.

Exit Do

L'istruzione Exit Do consente di fornire un modo alternativo per uscire da un ciclo Do…Loop. Tramite l'istruzione Exit Do il controllo viene trasferito immediatamente all'istruzione che segue l'istruzione Loop.

L'istruzione Exit Do spesso viene utilizzata dopo la valutazione di una determinata condizione, ad esempio in una struttura If...Then...Else. È possibile uscire da un ciclo se si rileva una condizione che rende inutile o impossibile continuare a scorrere, quale un valore erroneo o una richiesta di interruzione. L'istruzione Exit Do può essere utilizzata per eseguire un controllo su una condizione tramite la quale potrebbe essere generato un ciclo infinito, vale a dire un ciclo che potrebbe essere eseguito per un numero di volte elevato o persino infinito. È possibile utilizzare il controllo Exit Do per uscire dal ciclo.

È possibile inserire un numero illimitato di istruzioni Exit Do in qualsiasi punto di un ciclo Do…Loop.

Se utilizzata all'interno di cicli Do annidati, l'istruzione Exit Do consente il trasferimento del controllo dal ciclo più interno al livello di annidamento successivo superiore.

Esempio

Nell'esempio seguente l'esecuzione delle istruzioni nel ciclo continua finché la variabile index non risulta maggiore di 10. La clausola Until si trova alla fine del ciclo.

Dim index As Integer = 0
Do
    Debug.Write(index.ToString & " ")
    index += 1
Loop Until index > 10

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Nell'esempio seguente viene utilizzata una clausola While invece di una clausola Until e viene eseguito il test condition all'inizio del ciclo invece che alla fine.

Dim index As Integer = 0
Do While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Nell'esempio seguente, il ciclo viene interrotto da condition quando la variabile index è maggiore di 100. Tramite l'istruzione If nel ciclo, tuttavia, viene causata l'interruzione del ciclo mediante l'istruzione Exit Do quando la variabile di indice è maggiore di 10.

Dim index As Integer = 0
Do While index <= 100
    If index > 10 Then 
        Exit Do 
    End If

    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Nell'esempio seguente vengono lette tutte le righe di un file di testo. Il file viene aperto tramite il metodo OpenText, mediante il quale viene restituito un oggetto StreamReader che consente la lettura dei caratteri. Nella condizione Do...Loop, tramite il metodo Peek dell'oggetto StreamReader viene determinato se sono presenti eventuali caratteri aggiuntivi.

Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("File Not Found: " & textFilePath)
    Else 
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)

        Do While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        Loop

        sr.Close()
    End If 
End Sub

Vedere anche

Riferimenti

Istruzione For...Next (Visual Basic)

Tipo di dati Boolean (Visual Basic)

Istruzione Exit (Visual Basic)

Istruzione While...End While (Visual Basic)

Concetti

Strutture di ciclo (Visual Basic)

Strutture di controllo annidate (Visual Basic)