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

Consulte también