Home - ASP - Estructuras de control - 1 - 2 - 3
Estructuras de control (III) - Bucles
por Luciano Moreno, del departamento de Diseño Web de BJS Software.
BUCLES.-
Los bucles son estructuras de control que nos van a permitir la ejecución de una o más instrucciones un número dado de veces determinado por una condición. Cada una de las veces que se repitan se llama iteración.
For...To...Step...Next.-
El bucle For se usa cuando conocemos de antemano el número iteraciones a realizar, es decir, cuando sabemos con claridad cuántas veces se tiene que ejecutar el bucle. Es por ello la estructura de bucle más estricta. Su sintaxis general es:
For valor inicial To valor final Step paso
sentencias a repetir
Next
La estructura funciona de la siguiente forma: se comienza asignando un valor inicial a una variable, y se van recorriendo todos los valores de ésta entre el inicial y el final, incrementando en cada iteración el valor de la variable un número de unidades dado por el paso. La instrucción Next maraca el final del bucle, y manda el puntero de ejecución de código de nuevo al principio del bucle mientras la variable no supere el valor límite final establecido en To.
Si no se indica paso alguno, éste toma por defecto el valor 1, por lo que la variable se incrementa 1 unidad en cada iteración.
Ejemplo:
For i=2 To 10 Step 2
x=i
Next
Y en éste caso, la variable x valdrá 2 en la primera iteración, 4 en la segunda (valor inicial+paso= 2+2), 6 en la tercera, 8 en la cuarta y 10 en laquinta, y ahí se detiene el bucle, ya que en la siguiente iteración el valor de x superaría el máximo establecido en To. El valor final de x al acabar el bucle será pués 10. Trás acabar de ejecutarse el bucle, el código seguirá su proceso secuencial de ejecución.
La variable i es en éste caso el contador del bucle, variable que se encarga de controlar la ejecución adecuada del mismo.
Una limitación adicional de éste tipo de bucles es la de manejar sólamente números en su control, por lo que son llamados "bucles numéricos".
Los bucles For...To...Step tienen una forma de escape, la instrucción Exit For. Cuando en la ejecución del bucle se encuentra ésta instrucción se produce una salida inmediata del mismo, finalizándose el proceso. Puede ser útil a veces, pero suele dar más problemas que ventajas.
For Each.-
La estructura de bucle For Each es una variacción de la anterior, que nos va a permitir movernos por los elementos de una matriz o vector, recorriendo cada uno de sus elementos, repitiendo un conjunto de instrucciones para cada uno de ellos.
A diferencia del caso anterior, en ésta estructura no es necesario conocer de antemano el número de elementos de la matriz; el bucle recorre todos los que tenga, sin tener que decirles cuantos son.
Al final del bucle hay que colocar la instrucción Next.
La sintaxis general de ésta estructura de bucle es:
For Each contador in vector
conjunto de instrucciones del tipo vector(contador)=....
Next
Ejemplo:
Dim vector(8)
For Each indice in miMatriz
miMatriz(indice) = "HTMLWeb"
Next
que asigna a cada elemento del vector miMatriz la cadena "HTMLWeb" como valor.
While...Wend.-
Esta estructura de bucle nos permite ejecutar un conjunto de instrucciones mienras se cumpla una condición, no siendo necesario conocer el número de veces que se tiene que iterar. Se producirá la iteración una y otra vez mientras se cumpla la condición fijada.
Su sintaxis general es del tipo:
While(condicion)
sentencias a ejecutar
Wend
Es facil ver que la expresión While(condicion) devuelve un valor booleano (true o false), ejecutándose las instrucciones del bucle en el caso de devolver true (-1).
Ejemplo:
While(x<y)
x=x+1
c=x+y
Wend
Nota cómo hemos incrementado el valor de x en el bucle, ya que la estructura While no lo hace por sí misma. Si no la aumentáramos, podríamos entrar en un bucle infinito, ya que la condición, si es inicialmente cierta, lo sería siempre.
Do...Loop.-
Es la estructura de bucle más flexible, ya que permite ser configurada de forma ámplia. Realiza el proceso de iteración de las instrucciones contenidas en el bucle mientras se cumpla o mientras no se cumpla una condición previa.
La condición se puede fijar al principio del bucle (junto a Do) o al final del mismo (junto a Loop), y podemos especificar que se ejecuten las instrucciones del bucle mientras se cumpla la condición (añadiendo While = mientras que) o mientras no se cuimpla (añadiendo Until = hasta que).
Su sintaxis general es del tipo:
Do While / Until (condicion)
sentencias a ejecutar
Loop While / Until (condicion)
donde podemos ver las diferentes configuraciones posibles.
Si sólo establecemos Do y Loop, sin While ni Until, podemos especificar la condición al principio del bucle (junto a Do) o al final del mismo (junto a Loop). En el primer caso la condición se comprueba antes de empezar el bucle, mientras que en el segundo se hace trás realizar la primera iteración.
Si además colocamos While, se ejecutará el bucle siempre que se cumpla la condición, mientras que si colocamos Until, con lo que se ejecutarán las sentencias hasta que se cumpla la condición, momento en el que se detiene el bucle.
Ejemplo:
x = 0
Do While x < 10
x=x+1
Loop
que nos daría una salida x=10.
Esta estructura también posée una salida de bucle, la instrucción Exit Do, que situada en cualquier parte del bucle produce una salida inmediata del mismo. No conviene usarla, ya que añade confusión al bucle si éste es extenso.