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 ]
[ Exit Do ]
[ statements ]
Loop
-or-
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition
Parti
Argomento |
Definizione |
Do |
Obbligatoria. 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 |
Facoltativo. Espressione Boolean. Se la condition è Nothing, Visual Basic la considera False. |
statements |
Facoltativo. Una o più istruzioni ripetute finché la valutazione di condition resta o non diventa True. |
Exit Do |
Facoltativo. Trasferisce il controllo al di fuori del ciclo Do. |
Loop |
Obbligatoria. 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
Attività
Procedura: migliorare le prestazioni di un ciclo (Visual Basic)
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)
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
Gennaio 2011 |
Le note sono state riorganizzate e sono stati aggiunti degli esempi. |
Miglioramento delle informazioni. |