Istruzione Do...Loop (Visual Basic)
Ripete un blocco di istruzioni mentre una condizione Boolean
è True
o finché la condizione non diventa True
.
Sintassi
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 |
Obbligatorio. Avvia la definizione del ciclo Do . |
While |
Non è possibile fornirla se Until viene utilizzato. Ripetere il ciclo fino a quando condition non è False . |
Until |
Non è possibile fornirla se While viene utilizzato. Ripetere il ciclo fino a quando condition non è True . |
condition |
Facoltativo. Espressione Boolean . Se condition è Nothing , Visual Basic lo considera come False . |
statements |
Facoltativo. Una o più istruzioni ripetute durante o fino a quando condition non è True . |
Continue Do |
Facoltativo. Trasferisce il controllo alla prossima iterazione del ciclo Do . |
Exit Do |
Facoltativo. Trasferisce il controllo fuori dal ciclo Do . |
Loop |
Obbligatorio. Termina la definizione del ciclo Do . |
Osservazioni:
Usare una struttura Do...Loop
quando si desidera ripetere un set di istruzioni un numero illimitato di volte, fino a quando non viene soddisfatta una condizione. Se si desidera ripetere le istruzioni un numero di volte impostato, l'istruzione For...Next è in genere una scelta migliore.
È possibile usare While
o Until
per specificare condition
, ma non entrambi. Se non si assegnano le due opzioni, il ciclo continua fino a quando non viene eseguito un controllo di trasferimento Exit
all'esterno del ciclo.
È possibile testare condition
una sola volta, all'inizio o alla fine del ciclo. Se si esegue il test condition
all'inizio del ciclo (nell'istruzione Do
), il ciclo potrebbe non essere 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 restituisce in genere un confronto di due valori, ma può essere qualsiasi espressione che restituisce un valore di tipo di dati booleano (True
o False
). Sono inclusi i valori di altri tipi di dati, ad esempio i tipi numerici, che sono stati convertiti in Boolean
.
È possibile annidare i cicli Do
inserendone uno all'interno di un altro. È anche possibile annidare diversi tipi di strutture di controllo tra loro. Per altre informazioni, vedere Strutture di controllo annidate.
Nota
La struttura Do...Loop
offre maggiore flessibilità rispetto all'istruzione While...End perché consente di decidere se terminare il ciclo quando condition
smette di essere True
o quando diventa True
per la prima volta. Consente anche di eseguire il test condition
all'inizio o alla fine del ciclo.
Exit Do
L'istruzione Exit Do può fornire un modo alternativo per uscire da un oggetto Do…Loop
. Exit Do
trasferisce immediatamente il controllo all'istruzione che segue l'istruzione Loop
.
Exit Do
viene spesso usato dopo la valutazione di una condizione, ad esempio in una struttura If...Then...Else
. È possibile uscire da un ciclo se si rileva una condizione che rende superfluo o impossibile continuare l'iterazione, ad esempio un valore errato o una richiesta di terminazione. Un uso di Exit Do
consiste nel testare una condizione che potrebbe causare un ciclo infinito, ovvero un ciclo che potrebbe essere eseguito un numero elevato o persino infinito di volte. È possibile usare Exit Do
per uscire dal ciclo.
È possibile includere un numero qualsiasi di istruzioni Exit Do
in qualsiasi punto di un oggetto Do…Loop
.
Se usato all'interno di cicli Do
annidati, Exit Do
trasferisce il controllo all'esterno del ciclo più interno e nel successivo livello superiore di annidamento.
Esempio 1
Nell'esempio seguente le istruzioni nel ciclo continuano a essere eseguite fino a quando la variabile index
non è 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
Esempio 2
Nell'esempio seguente viene utilizzata una clausola While
anziché una clausola Until
e condition
viene testata all'inizio del ciclo anziché 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
Esempio 3
Nell'esempio seguente condition
arresta il ciclo quando la variabile index
è maggiore di 100. L'istruzione If
nel ciclo, tuttavia, fa sì che l'istruzione Exit Do
arresti il ciclo 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
Esempio 4
Nell'esempio seguente vengono lette tutte le righe di un file di testo. Il metodo OpenText apre il file e restituisce un oggetto StreamReader che legge i caratteri. Nella condizione Do...Loop
il metodo Peek dell'oggetto StreamReader
determina se sono presenti 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