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.