- Windows Script Host - VBScript - Bucle -

Un bucle (o ciclo) es un constructor que permite repetir reiteradas veces una sentencia o grupo de estas, hasta que deje de cumplirse una condición predeterminada.
En WBScript existen dos tipos de bucles:
- bucles controlados por cifras
- bucles controlados por condiciones
En el caso de utilizarse un bucle simple controlado por cifras, se trata de transcurrir un número predefinido de ciclos, con lo que se ejecutará el código, la cantidad de veces determinada. Esta forma de bucle es de fácil manipulación. Se define un valor de inicio y uno de terminación. Todos los valores, incluidos los consignados (inicio y fin) serán transcurridos. Incluso, es posible establecer pautas, por ejemplo cada segundo valor, lo que limitaría el procesamiento a cada segundo valor.
En contraposición está el bucle, cuya continuación o interrupción está determinada por una condición predeterminada. En este caso, el número de ciclos que ha de ejecutar el bucle, en principio, no es controlado. Una condición en ese sentido puede ser, digamos, el valor de una variable. Ejemplo puede ser un bucle, el cual se ejecutaría hasta que el contenido de una variable sea menor que 100. De esta forma es posible controlar la entrada de datos de un usuario, la cual deberá ser repetida, hasta que el usuario entre el valor correcto.

For … Next
Este bucle comienza con un valor inicial y termina con un valor final. Con cada nuevo ciclo se incrementa en uno el valor del numerador, hasta que alcance el valor final. Normalmente, el valor del numerador se incrementa en uno con cada ciclo. No obstante, es posible determinar otro valor (número entero) o ritmo, con que ha de ejecutarse el bucle.

For variable = inicio To final [bloque de sentencias]
Next

El ejemplo siguiente, indaga una cifra y calcula su número factorial. Esto es posible con un bucle, el cual circulará desde uno hasta la cifra indagada y multiplicará todos los valores resultantes.

' for_next.vbs
' ========================
Dim ifactorialresult, ifactorial
 
ifactorial = 5
 
ifactorialresult = 1
For inumerador = 1 To ifactorial
ifactorialresult = ifactorialresult * inumerador
 
Next
 
WScript.Echo("En número factorial de " + CStr(ifactorial) + " es " + _
CStr(ifactorialresult))

Otra forma de bucle es "For … Each", el cual se tratará en relación con objetos.

Do … Loop
Este bucle es controlado por una condición. En dependencia de si la condición se cumple o no, se interrumpirá o continuará el bucle.
Permite probar la condición al principio o al final del bucle.
De probarse la condición al principio del bucle, o sea, antes del primer ciclo, tiene dos tendencias; una a través de "Do While (condición) … Loop", la cual se ejecutará mientras se cumpla la condición. La otra tendencia es "Do Until (condición) … Loop", la cual se ejecutará mientras no se cumpla la condición.

Do { While | Until } condición
[bloque de instrucciones]
[Exit Do]
[bloque de instrucciones]
Loop

o

Do
[bloque de instrucciones]
[Exit Do]
bloque de instrucciones]
Loop { While | Until } condición

- While, es obligatorio si se utiliza Until y repite el bucle hasta que la condición sea False.
- Until, es obligatorio, a no ser que se utilize While y repite el bucle hasta que la condición sea True.
- Condición, es una expresión Booleana opcional. Si la condición es Nothing, se trata como False.
- Bloque de instrucciones, es opcional y se trata de una o más instrucciones, las cuales se repiten mientras o hasta que la condición sea True.
- Exit Do, es opcional y transfiere el control fuera del bucle Do.
Loop, es obligatorio. Termina la definición del bucle Do.

En el siguiente ejemplo, se muestra un bucle "Do While (condición) … Loop", el cual se ejecutará mientras la condición sea True.

' dowhile.vbs
' =================
Dim numerador, valormax

valormax = 50
numerador = 0

Do While numerador < valormax
numerador = numerador + 1
WScript.Echo("numerador = " + CStr(numerador))
Loop

En este ejemplo, el bucle será ejecutado mientras la variable "numerador" sea menor que la variable "valormax". Dado que con cada ciclo, el valor de "numerador" será aumentado en uno, esa condición tarde o temprano se cumplirá.
En bucles, cuya condición sea comprobada al inicio del mismo, puede darse el caso, en el cual el contenido del bucle no será ejecutado nunca. Esto ocurre, cuando la condición se cumple con un False. En el ejemplo anterior, ocurriría, cuando "valormax" sea 0 o un valor negativo.
El siguiente ejemplo, muestra el bucle "Do Until (condición) … Loop", el cual será ejecutado mientras no se cumpla la condición.

' dountil.vbs
' ====================
Dim cifra
nbsp;
Do Until (cifra <=100) and (cifra >0)
cifra = _
CInt(InputBox("Teclee un número entre 0 y 100"))
Loop
 
MsgBox "Ud. ha tecleado el número " + CStr(cifra) + " . Muchas gracias"

Este ejemplo le pide el usuario que teclee un número entre 0 y 100, hasta que el mismo teclee la cifra correcta. Para esto se utiliza la función "InputBox()", la cual será comentada más adelante. Si la cifra tecleada está fuera del intervalo señalado, se repetirá el bucle. Así, es posible comprobar la entrada de datos para su posterior procesamiento.
Es posible interrumpir el bucle durante un ciclo. Esto se logra con el comando "Break Do".

' exitloop.vbs
' =================
Dim max, ciclo
 
ciclo = 0
max = 10000
 
Do While ciclo <= max
 
ciclo = ciclo + 1
WScript.Echo("Ciclo número " + CStr(ciclo))
If MsgBox("¿Desea abandonar el bucle?", _
vbYesNo + vbDefaultButton2, "Pregunta") = vbYes Then
Exit Do
End If
 
Loop

Este bucle pregunta al usuario en una ventana de dialogo, si desea abandonar el mismo, para lo que utiliza la función "MsgBox()".
Otra forma del bucle "Do … Loop" comprueba la condición al final del primer ciclo, lo que garantiza la ejecución de por lo menos un ciclo antes de comprobar la condición.
El siguiente ejemplo muestra esta variante:

' dountil1.vbs
' ================

Dim contador, max

max = 100
contador = 100

Do
contador = contador + 1
Loop Until contador > max

WScript.Echo("Contador = " + CStr(contador))

La variable "contador" contiene al final del script el valor 101, no obstante la condición del bucle es que debe continuar solo cuando el valor de "contador" sea menor que "max" (100). El bucle se ejecutará por lo menos una vez, antes de comprobarse la condición.

previo
Imprimir!
Ultima actualisación: Tue, 24 ▪ May ▪ 2011
próximo