Instrucción For...Next (Visual Basic)

Actualización: noviembre 2007

Repite un grupo de instrucciones un número de veces especificado.

For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

Partes

  • counter
    Se requiere en la instrucción For. Variable numérica. Variable de control para el bucle.

  • datatype
    Obligatorio, a menos que counter ya se haya declarado. Tipo de datos de counter.

  • start
    Obligatorio. Expresión numérica. Valor inicial de counter.

  • end
    Obligatorio. Expresión numérica. Valor final de counter.

  • step
    Opcional. Expresión numérica. Cantidad en la que se incrementa counter cada vez que se recorre el bucle.

  • statements
    Opcional. Una o más instrucciones entre For y Next que se ejecutan un número especificado de veces.

  • Exit For
    Opcional. Transfiere el control fuera del bucle For.

  • Next
    Obligatorio. Termina la definición del bucle For.

Comentarios

Utilice una estructura For...Next cuando desee repetir un conjunto de instrucciones un número fijo de veces.

Una Instrucción While...End While (Visual Basic) o una Instrucción Do...Loop (Visual Basic) funciona bien cuando no se sabe de antemano cuántas veces se necesita ejecutar las instrucciones del bucle. Sin embargo, cuando espere ejecutar el bucle un número concreto de veces, For...Next es una mejor elección. Determina el número de iteraciones cuando se entra en el bucle por primera vez.

El valor de step puede ser positivo o negativo. Determina el procesamiento del bucle como sigue:

Valor de step

El bucle se ejecuta si

Positivo o cero

counter <= end

Negativo

counter >= end

Si no se especifica, el valor predeterminado de step es 1.

Reglas

  • Tipos de datos. El tipo de datos de counter suele ser Integer, pero puede ser cualquier tipo que admita los operadores mayor o igual que (>=), menor o igual que (<=), suma (+) y resta (-). Incluso puede ser un tipo definido por el usuario siempre que admita todos estos operadores.

    Las expresiones start, end y step suelen evaluarse como tipo Integer, pero pueden evaluarse como cualquier tipo de datos que se amplíe al tipo de counter. Si se utiliza un tipo definido por el usuario para counter, significa que hay que definir el operador de conversión CType para convertir los tipos de start, end o step al tipo de counter.

  • Declaración. Si counter no se ha declarado fuera de este bucle, se debe declarar en la instrucción For. En tal caso, el ámbito de counter es el cuerpo del bucle. Sin embargo, no se puede declarar counter fuera y dentro del bucle.

  • Número de iteraciones. Visual Basic evalúa los valores de iteración start, end y step sólo una vez, antes de que comience el bucle. Si el bloque de instrucciones cambia end o step, estos cambios no afectan a la iteración del bucle.

  • Bucles anidados. Se pueden anidar bucles For colocando un bucle dentro de otro. Sin embargo, cada bucle debe tener una variable counter única. La siguiente construcción es válida.

    For i As Integer = 1 To 10
        For j As Integer = 1 To 10
            For k As Integer = 1 To 10
                ' Insert statements to operate with current values of i, j, and k.
            Next k
        Next j
    Next i
    

    También se pueden anidar entre sí tipos diferentes de estructuras de control. Para obtener más información, vea Estructuras de control anidadas.

    Nota:

    Si una instrucción Next de un nivel de anidamiento externo se encuentra antes de la instrucción Next de un nivel interno, el compilador genera un error. Sin embargo, el compilador sólo puede detectar este error superpuesto si se especifica counter en cada instrucción Next.

  • Identificar la variable de control. Opcionalmente, puede especificarse counter en la instrucción Next. Esto mejora la legibilidad del programa, sobre todo si se han anidado bucles For. La variable que se especifique debe ser igual a la que aparece en la instrucción For correspondiente.

  • Transferir fuera del bucle. La Instrucción Exit (Visual Basic) transfiere el control inmediatamente a la instrucción que sigue a Next. 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. Asimismo, si se detecta una excepción en una instrucción Try...Catch...Finally, se puede utilizar Exit For al final del bloque Finally.

    Se puede colocar cualquier número de instrucciones Exit For en un bucle For. Exit For se suele utilizar después de evaluar alguna condición, por ejemplo en una estructura If...Then...Else.

  • Bucles sin fin. Un uso de Exit For es comprobar una condición que pudiera ocasionar un bucle sin fin; es decir, un bucle que pudiera ejecutarse un número extremadamente elevado de veces e incluso infinitamente. Si se detecta este tipo de condición, se puede utilizar Exit For para escapar del bucle. Para obtener más información, vea Instrucción Do...Loop (Visual Basic).

Comportamiento

  • Entrada en el bucle. Cuando comienza la ejecución del bucle For...Next, Visual Basic evalúa start, end y step por primera y única vez. Después asigna start a counter. Antes de ejecutar el bloque de instrucciones, compara counter con end. Si counter ya ha superado el valor final, el bucle For finaliza y el control pasa a la instrucción que sigue a Next. De lo contrario se ejecuta el bloque de instrucciones.

  • Iteraciones del bucle. Cada vez que Visual Basic encuentra la instrucción Next, incrementa counter en el valor indicado en step y vuelve a la instrucción For. Compara de nuevo counter con end y, otra vez, ejecuta el bloque o termina el bucle según el resultado. Este proceso continúa hasta que counter sobrepasa end o se encuentra una instrucción Exit For.

  • Terminación del bucle. El bucle no finaliza hasta que counter haya sobrepasado end. Si counter es igual a end, el bucle continúa. La comparación que determina si se ejecuta el bloque es counter <= end si step es positivo y counter >= end si step es negativo.

  • Cambiar los valores de iteración. Cambiar el valor de counter mientras se está dentro de un bucle puede dificultar la lectura y la depuración del código. Cambiar el valor de start, end o step no afecta a los valores de iteración especificados cuando se entró en el bucle por primera vez.

Ejemplo

En el ejemplo siguiente se muestran estructuras For...Next anidadas con valores de incremento diferentes.

Dim words, digit As Integer
Dim thisString As String = ""
For words = 10 To 1 Step -1
    For digit = 0 To 9
        thisString &= CStr(digit)
    Next digit
    thisString &= " "
Next words

En el ejemplo anterior se crea una cadena que contiene 10 instancias de los números del 0 al 9, donde cada cadena está separada de la siguiente por un único espacio en blanco. El bucle externo disminuye una variable de contador del bucle cada vez que se recorre el bucle.

Vea también

Tareas

Cómo: Mejorar el rendimiento de un bucle

Conceptos

Estructuras de bucles

Estructuras de control anidadas

Referencia

Instrucción While...End While (Visual Basic)

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

Instrucción Exit (Visual Basic)

Instrucción For Each...Next (Visual Basic)