Instrucción Do...Loop (Visual Basic)Do...Loop Statement (Visual Basic)

Repite un bloque de instrucciones mientras se True una condición Boolean o hasta que la condición se True.Repeats a block of statements while a Boolean condition is True or until the condition becomes True.

SintaxisSyntax

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  

ElementosParts

TérminoTerm DefiniciónDefinition
Do Obligatorio.Required. Inicia la definición del bucle Do.Starts the definition of the Do loop.
While Es necesario a menos que se use Until.Required unless Until is used. Repita el bucle hasta que se False``condition.Repeat the loop until condition is False.
Until Es necesario a menos que se use While.Required unless While is used. Repita el bucle hasta que se True``condition.Repeat the loop until condition is True.
condition Opcional.Optional. Boolean expresión.Boolean expression. Si condition es Nothing, Visual Basic lo trata como False.If condition is Nothing, Visual Basic treats it as False.
statements Opcional.Optional. Una o varias instrucciones que se repiten mientras, o hasta, se True``condition.One or more statements that are repeated while, or until, condition is True.
Continue Do Opcional.Optional. Transfiere el control a la siguiente iteración del bucle Do.Transfers control to the next iteration of the Do loop.
Exit Do Opcional.Optional. Transfiere el control fuera del bucle Do.Transfers control out of the Do loop.
Loop Obligatorio.Required. Finaliza la definición del bucle Do.Terminates the definition of the Do loop.

ComentariosRemarks

Use una estructura de Do...Loop cuando desee repetir un conjunto de instrucciones un número indefinido de veces, hasta que se satisfaga una condición.Use a Do...Loop structure when you want to repeat a set of statements an indefinite number of times, until a condition is satisfied. Si desea repetir las instrucciones un número establecido de veces, la instrucción for... La siguiente instrucción suele ser una mejor opción.If you want to repeat the statements a set number of times, the For...Next Statement is usually a better choice.

Puede usar While o Until para especificar condition, pero no ambos.You can use either While or Until to specify condition, but not both.

Solo puede probar condition una vez, al principio o al final del bucle.You can test condition only one time, at either the start or the end of the loop. Si prueba condition al principio del bucle (en la instrucción Do), es posible que el bucle no se ejecute incluso una vez.If you test condition at the start of the loop (in the Do statement), the loop might not run even one time. Si realiza una prueba al final del bucle (en la instrucción Loop), el bucle siempre se ejecuta al menos una vez.If you test at the end of the loop (in the Loop statement), the loop always runs at least one time.

La condición suele ser 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).The condition usually results from a comparison of two values, but it can be any expression that evaluates to a Boolean Data Type value (True or False). Esto incluye los valores de otros tipos de datos, como los tipos numéricos, que se han convertido en Boolean.This includes values of other data types, such as numeric types, that have been converted to Boolean.

Puede anidar Do bucles colocando un bucle dentro de otro.You can nest Do loops by putting one loop within another. También puede anidar distintos tipos de estructuras de control entre sí.You can also nest different kinds of control structures within each other. Para obtener más información, vea estructuras de control anidadas.For more information, see Nested Control Structures.

Nota

La estructura de Do...Loop proporciona más flexibilidad que el tiempo... End while , ya que permite decidir si finalizar el bucle cuando condition deja de True o cuando se convierte por primera vez en True.The Do...Loop structure gives you more flexibility than the While...End While Statement because it enables you to decide whether to end the loop when condition stops being True or when it first becomes True. También le permite probar condition al principio o al final del bucle.It also enables you to test condition at either the start or the end of the loop.

SalirExit Do

La instrucción Exit do puede proporcionar una manera alternativa de salir de un Do…Loop.The Exit Do statement can provide an alternative way to exit a Do…Loop. Exit Do transfiere el control inmediatamente a la instrucción que sigue a la instrucción Loop.Exit Do transfers control immediately to the statement that follows the Loop statement.

a menudo se usa Exit Do después de evaluar alguna condición, por ejemplo en una estructura de If...Then...Else.Exit Do is often used after some condition is evaluated, for example in an If...Then...Else structure. Es posible que desee salir de un bucle si detecta una condición que hace que sea innecesario o imposible continuar la iteración, como un valor erróneo o una solicitud de finalización.You might want to exit a loop if you detect a condition that makes it unnecessary or impossible to continue iterating, such as an erroneous value or a termination request. Un uso de Exit Do es probar una condición que podría provocar un bucle interminable, que es un bucle que podría ejecutar un número de veces grande o incluso infinito.One use of Exit Do is to test for a condition that could cause an endless loop, which is a loop that could run a large or even infinite number of times. Puede usar Exit Do para escapar el bucle.You can use Exit Do to escape the loop.

Puede incluir cualquier número de instrucciones Exit Do en cualquier parte de un Do…Loop.You can include any number of Exit Do statements anywhere in a Do…Loop.

Cuando se utiliza en bucles Do anidados, Exit Do transfiere el control fuera del bucle más interno y en el siguiente nivel superior de anidamiento.When used within nested Do loops, Exit Do transfers control out of the innermost loop and into the next higher level of nesting.

EjemploExample

En el ejemplo siguiente, las instrucciones del bucle continúan ejecutándose hasta que la variable de index sea mayor que 10.In the following example, the statements in the loop continue to run until the index variable is greater than 10. La cláusula Until está al final del bucle.The Until clause is at the end of the loop.

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 

EjemploExample

En el ejemplo siguiente se utiliza una cláusula While en lugar de una cláusula Until y condition se prueba al principio del bucle en lugar de al final.The following example uses a While clause instead of an Until clause, and condition is tested at the start of the loop instead of at the end.

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 

EjemploExample

En el ejemplo siguiente, condition detiene el bucle cuando la variable de index es mayor que 100.In the following example, condition stops the loop when the index variable is greater than 100. Sin embargo, la instrucción If del bucle hace que la instrucción Exit Do detenga el bucle cuando la variable de índice sea mayor que 10.The If statement in the loop, however, causes the Exit Do statement to stop the loop when the index variable is greater than 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 

EjemploExample

En el ejemplo siguiente se leen todas las líneas de un archivo de texto.The following example reads all lines in a text file. El método OpenText abre el archivo y devuelve un StreamReader que lee los caracteres.The OpenText method opens the file and returns a StreamReader that reads the characters. En la condición Do...Loop, el método Peek de la StreamReader determina si hay caracteres adicionales.In the Do...Loop condition, the Peek method of the StreamReader determines whether there are any additional characters.

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énSee also