Visual Basic Scripting Edition  

Repetir código mediante bucles

Los bucles le permiten ejecutar un grupo de instrucciones de manera repetida. Algunos bucles repiten instrucciones hasta que una condición es False; otros repiten instrucciones hasta que una condición es True. Existen también bucles que repiten instrucciones un número de veces específico.

Las siguientes instrucciones de repetición están disponibles en VBScript:

Utilizar Do Loop

Puede utilizar instrucciones Do...Loop para ejecutar un bloque de instrucciones un número indefinido de veces. Las instrucciones se repiten mientras una condición es True o hasta que una condición sea True.

Repetir instrucciones mientras una condición es True

Utilice la palabra clave While para comprobar una condición en una instrucción Do...Loop. Puede comprobar la condición antes de introducir el bucle (como se muestra en el siguiente ejemplo de ChkFirstWhile), o puede comprobarlo después de que se haya ejecutado el bucle al menos una vez (como se muestra en el ejemplo de ChkLastWhile). En el procedimiento ChkFirstWhile, si myNum se establece como 9 en lugar de 20, las instrucciones dentro del bucle no se ejecutarán nunca. En el procedimiento ChkLastWhile, las instrucciones dentro del bucle sólo se ejecutan una vez porque la condición ya es False.

Sub ChkFirstWhile()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do While myNum > 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   MsgBox "El bucle realizó " & counter & " repeticiones."
End Sub

Sub ChkLastWhile()
   Dim counter, myNum
   counter = 0
   myNum = 9
   Do
      myNum = myNum - 1
      counter = counter + 1
   Loop While myNum > 10
   MsgBox "El bucle realizó " & counter & " repeticiones."
End Sub

Repetir una instrucción hasta que una condición sea True

Hay dos maneras de utilizar la palabra clave Until para comprobar una condición en una instrucción Do...Loop. Puede comprobar la condición antes de que entre en el bucle (como se muestra en el siguiente ejemplo de ChkFirstUntil), o puede comprobarlo después de que se haya ejecutado el bucle al menos una vez (como se muestra en el ejemplo de ChkLastUntil). Siempre que la condición sea False, se ejecutará el bucle.

Sub ChkFirstUntil()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do Until myNum = 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   MsgBox "El bucle realizó " & counter & " repeticiones."
End Sub

Sub ChkLastUntil()
   Dim counter, myNum
   counter = 0
   myNum = 1
   Do
      myNum = myNum + 1
      counter = counter + 1
   Loop Until myNum = 10
   MsgBox "El bucle realizó " & counter & " repeticiones."
End Sub

Salir de una instrucción Do...Loop desde dentro del bucle

Puede salir de un bucle Do...Loop con la instrucción Exit Do. Ya que normalmente se desea salir sólo en situaciones concretas, tales como evitar un bucle interminable, debe utilizar la instrucción Exit Do en el bloque de la instrucción True de una instrucción If...Then...Else. Si la condición es False, el bucle se ejecuta con normalidad.

En el siguiente ejemplo, a myNum se le asigna un valor que crea un bucle interminable. La instrucción If...Then...Else comprueba esta condición, con lo que se impide la repetición interminable.

Sub ExitExample()
   Dim counter, myNum
   counter = 0
   myNum = 9
   Do Until myNum = 10
      myNum = myNum - 1
      counter = counter + 1
      If myNum < 10 Then Exit Do
   Loop
   MsgBox "El bucle realizó " & counter & " repeticiones."
End Sub

Utilizar While...Wend

La instrucción While...Wend se proporciona en VBScript para aquellos que están familiarizados con su uso. Sin embargo, debido a la falta de flexibilidad de While...Wend, se recomienda que se utilice en su lugar Do...Loop.

Utilizar For...Next

Puede utilizar instrucciones For...Next para ejecutar un bloque de instrucciones un número de veces específico. Para bucles, utilice una variable de contador cuyo valor se incremente o disminuya con cada repetición del bucle.

El siguiente ejemplo hace que un procedimiento llamado MyProc se ejecute 50 veces. La instrucción For especifica la variable de contador x y sus valores de inicio y fin. La instrucción Next incrementa la variable de contador en 1.

Sub DoMyProc50Times()
   Dim x
   For x = 1 To 50
      MyProc
   Next
End Sub

Mediante la palabra clave Step, puede incrementar o disminuir la variable de contador por el valor que especifique. En el siguiente ejemplo, la variable de contador j se incrementa en 2 cada vez que se repite el bucle. Cuando finaliza el bucle, el total es la suma de 2, 4, 6, 8 y 10.

Sub TwosTotal()
   Dim j, total
   For j = 2 To 10 Step 2
      total = total + j
   Next
   MsgBox "El total es " & total
End Sub

Para disminuir la variable de contador, utilice un valor negativo para Step. Debe especificar un valor final que sea menor que el valor de inicio. En el siguiente ejemplo, la variable de contador myNum disminuye en 2 cada vez que se repite el bucle. Cuando finaliza el bucle, el total es la suma de 16, 14, 12, 10, 8, 6, 4 y 2.

Sub NewTotal()
   Dim myNum, total
   For myNum = 16 To 2 Step -2
      total = total + myNum
   Next
   MsgBox "El total es " & total
End Sub

Puede salir de cualquier instrucción For...Next antes de que el contador alcance su valor final con la instrucción Exit For. Ya que normalmente se desea salir sólo en situaciones concretas, como cuando se produce un error, debe utilizar la instrucción Exit For en el bloque de la instrucción True de una instrucción If...Then...Else. Si la condición es False, el bucle se ejecuta con normalidad.

Utilizar For Each...Next

Un bucle For Each...Next es similar a un bucle For...Next. En lugar de repetir las instrucciones un número de veces especificado, un bucle For Each...Next repite un grupo de instrucciones para cada elemento de una colección de objetos o de una matriz. Esto es especialmente útil si no sabe cuántos elementos hay en una colección.

En el siguiente ejemplo de código HTML, el contenido de un objeto Dictionary se utiliza para colocar texto en varios cuadros de texto.

<HTML>
<HEAD><TITLE>Formas y elementos</TITLE></HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub cmdChange_OnClick
   Dim d      'Crear una variable 
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "0", "Atenas"      'Agregar algunas claves y elementos
   d.Add "1", "Belgrado"
   d.Add "2", "El Cairo"

   For Each I in d
      Document.frmForm.Elements(I).Value = D.Item(I)
   Next
End Sub
-->
</SCRIPT>
<BODY>
<CENTER>
<FORM NAME="frmForm"

<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Botón" NAME="cmdChange" VALUE="Haga clic aquí"><p>
</FORM>
</CENTER>
</BODY>
</HTML>
Ayuda de Javascript y Vbscript para Javascripts.astalaweb.com.