Instrucción Do...Loop (Visual Basic)
Repite un bloque de instrucciones mientras una condición Boolean sea True o hasta que la condición se convierta en True.
Do { While | Until } condition
[ statements ]
[ Exit Do ]
[ statements ]
Loop
-or-
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition
Partes
Término |
Definición |
Do |
Obligatorio. Inicia la definición del bucle Do. |
While |
Obligatorio si se utiliza Until. Repite el bucle hasta que condition sea False. |
Until |
Obligatorio a menos que se utilice While. Repite el bucle hasta que condition sea True. |
condition |
Opcional. Expresión Boolean. Si condition es Nothing, Visual Basic la trata como False. |
statements |
Opcional. Una o más instrucciones que se repiten mientras o hasta que condition sea True. |
Exit Do |
Opcional. Transfiere el control fuera del bucle Do. |
Loop |
Obligatorio. Termina la definición del bucle Do. |
Comentarios
Utilice una estructura Do...Loop cuando desee repetir un conjunto de instrucciones un número indefinido de veces, hasta que se satisfaga una condición. Si desea repetir las instrucciones un número fijo de veces, la Instrucción For...Next es normalmente una opción mejor.
Puede usar While o Until para especificar condition, pero no ambas.
Puede probar condition solo una vez, en el inicio o el final del bucle. Si prueba condition al principio del bucle (en la instrucción Do), puede que el bucle no se ejecute ni siquiera una vez. Si prueba al final del bucle (en la instrucción Loop), el bucle siempre se ejecuta al menos una vez.
Generalmente, la condición es el resultado de comparar dos valores, pero también puede ser cualquier expresión que da como resultado un valor Boolean (Tipo de datos, Visual Basic) (True o False). Esto incluye los valores de otros tipos de datos, como los numéricos, que han sido convertidos a valores de tipo Boolean.
Se pueden anidar bucles Do colocando un bucle dentro de otro. También puede anidar distintos tipos de estructuras de control unos dentro de otros. Para obtener más información, vea Estructuras de control anidadas (Visual Basic).
Nota
La estructura Do...Loop proporciona mayor flexibilidad que la Instrucción While...End While (Visual Basic) porque permite decidir si se debe finalizar el bucle cuando condition deja de ser True o cuando es True por primera vez. También le permite probar condition en el inicio o el final del bucle.
Exit Do
La instrucción Exit Do puede proporcionar una alternativa para salir de Do…Loop. Exit Do transfiere el control inmediatamente a la instrucción que sigue a la instrucción Loop.
Exit Do se utiliza a menudo después de evaluar alguna condición, por ejemplo en una estructura If...Then...Else. Por ejemplo, puede ser conveniente salir de un bucle si se detecta una condición que hace que sea innecesario o imposible continuar la iteración, como puede ser un valor erróneo o una solicitud de finalización. Un uso de Exit Do consiste en comprobar una condición que podría ocasionar un bucle sin fin; es decir, un bucle que pudiera ejecutarse un número elevado, o incluso infinito, de veces. Puede utilizar Exit Do para escapar del bucle.
Puede incluir cualquier número de instrucciones Exit Do en cualquier lugar de Do…Loop.
Cuando se utiliza dentro de bucles Do anidados, Exit Do transfiere el control fuera del bucle más profundo y al siguiente nivel de anidamiento.
Ejemplo
En el ejemplo siguiente, las instrucciones del bucle continúan ejecutándose hasta que la variable index es superior a 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
En el ejemplo siguiente se utiliza una cláusula While en vez de una cláusula Until, y se prueba condition al inicio del bucle en lugar de 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
En el siguiente ejemplo, condition detiene el bucle cuando la variable index es superior a 100. La instrucción If del bucle, sin embargo, hace que la instrucción Exit Do detenga el bucle cuando la variable índice es mayor de 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
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 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
Vea también
Tareas
Cómo: Mejorar el rendimiento de un bucle (Visual Basic)
Referencia
Instrucción For...Next (Visual Basic)
Boolean (Tipo de datos, Visual Basic)
Exit (Instrucción, Visual Basic)
Instrucción While...End While (Visual Basic)
Conceptos
Estructuras de bucles (Visual Basic)
Estructuras de control anidadas (Visual Basic)
Historial de cambios
Fecha |
Historial |
Motivo |
Enero de 2011 |
Reorganizadas las observaciones y agregados los ejemplos. |
Mejora de la información. |