Instrucción Do...Loop (Visual Basic)
Repite un bloque de instrucciones mientras una condición Boolean
es True
o hasta que la condición se convierte en True
.
Sintaxis
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 ]
Partes
Término | Definición |
---|---|
Do |
Obligatorio. Inicia la definición del bucle Do . |
While |
No se puede proporcionar si se usa Until . Repite el bucle hasta que condition es False . |
Until |
No se puede proporcionar si se usa While . Repite el bucle hasta que condition es True . |
condition |
Opcional. Expresión Boolean . Si condition es Nothing , Visual Basic lo trata como False . |
statements |
Opcional. Una o varias instrucciones que se repiten mientras, o hasta, que condition es True . |
Continue Do |
Opcional. Transfiere el control a la iteración siguiente del bucle Do . |
Exit Do |
Opcional. Transfiere el control fuera del bucle Do . |
Loop |
Necesario. Finaliza la definición del bucle Do . |
Comentarios
Use una estructura Do...Loop
cuando quiera repetir un conjunto de instrucciones un número indefinido de veces, hasta que se cumpla una condición. Si quiere repetir las instrucciones un número determinado de veces, la instrucción For...Next suele ser una mejor opción.
Puede usar While
o Until
para especificar condition
, pero no ambos. Si no proporciona ninguno, el bucle continúa hasta que Exit
transfiere el control fuera del bucle.
Solo puede probar condition
una vez, ya sea al inicio o al final del bucle. Si prueba condition
al inicio del bucle (en la instrucción Do
), es posible que el bucle no se ejecute ni siquiera una vez. Si hace la prueba al final del bucle (en la instrucción Loop
), el bucle siempre se ejecuta al menos una vez.
Por lo general, la condición es el resultado de una comparación de dos valores, pero puede ser cualquier expresión que se evalúe como un valor de tipo de datos booleano (True
o False
). Esto incluye valores de otros tipos de datos, como datos numéricos, que se convirtieron en Boolean
.
Puede anidar bucles Do
si coloca un bucle dentro de otro. También puede anidar diferentes tipos de estructuras de control entre sí. Para más información, consulte Estructuras de control anidadas.
Nota
La estructura Do...Loop
le ofrece más flexibilidad que la instrucción While...End While, porque le permite decidir si finalizar el bucle cuando condition
deja de ser True
o la primera vez que se convierte en True
. También le permite probar condition
al inicio o al final del bucle.
Exit Do
La instrucción Exit Do puede proporcionar una manera alternativa de salir de Do…Loop
. Exit Do
transfiere inmediatamente el control a la instrucción que hay a continuación de la instrucción Loop
.
Por lo general, Exit Do
se usa después de evaluar una condición (por ejemplo, en una estructura If...Then...Else
). Es posible que quiera salir de un bucle si detecta una condición que hace que sea innecesario o imposible seguir iterando, como un valor erróneo o una solicitud de finalización. Una forma de usar Exit Do
es probar una condición que podría provocar un bucle sin fin, que es un bucle que se podría ejecutar un número de veces muy grande o incluso infinito. Puede usar Exit Do
para salir del bucle.
Puede incluir cualquier número de instrucciones Exit Do
en cualquier lugar de un Do…Loop
.
Cuando se usa dentro de bucles Do
anidados, Exit Do
transfiere el control fuera del bucle más interno y al nivel superior de anidamiento siguiente.
Ejemplo 1
En el ejemplo siguiente, las instrucciones del bucle siguen ejecutándose hasta que la variable index
sea mayor que 10. La cláusula Until
está al final del bucle.
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
Ejemplo 2
En el ejemplo siguiente, se usa una cláusula While
en lugar de una cláusula Until
y condition
se prueba al inicio del bucle en lugar de hacerlo al final.
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
Ejemplo 3
En el ejemplo siguiente, condition
detiene el bucle cuando la variable index
es mayor que 100. Sin embargo, la instrucción If
del bucle hace que la instrucción Exit Do
detenga el bucle si la variable de índice es mayor que 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
Ejemplo 4
En el ejemplo siguiente, se leen todas las líneas de un archivo de texto. El método OpenText abre el archivo y devuelve un objeto StreamReader que lee los caracteres. En la condición Do...Loop
, el método Peek de StreamReader
determina si hay caracteres adicionales.
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