Ciclos usando Do While y Do Until
En el Do While, se ejecutan las instrucciones mientras sea cierta
la expresión de control.
Ej.:
Private Sub Command1_Click( )
Dim Control as Long
On Error
Resume Next
Control =
Text1.Text
Form1.BackColor
= vbWhite
Do While
Control <> 0
Label2.Caption
= “Valor: ” & Control
If
Form1.BackColor = vbWhite Then
Form1.BackColor
= vbRed
Else
Form1.BackColor
= vbWhite
End
If
Control
= Text1.Text
DoEvents
Loop
MsgBox
“Loop completado”
End Sub
En el ejemplo presentado, la
forma cambiará de color blanco a rojo y viceversa mientras el texto de Text1
sea diferente a cero (0). Tan pronto el valor del texto sea igual a cero, el
ciclo terminará su ejecución. Se utiliza la línea On Error Resume Next para indicarle a Visual
Basic que siga ejecutando la forma, aún cuando ocurra un error de ejecución.
Esta instrucción es necesaria dado que en el ciclo Do While se lee
continuamente el texto del Text1. Si la línea On Error Resume Next no se escribe y en
algún momento se borra el texto para escribir otro valor, Visual Basic daría
error al leer el texto en ese instante.
En Do While Control <> 0, la expresión de
control es Control <> 0. Esta es la expresión que controla el ciclo. Al
ser evaluada, solo puede tomar el valor de True (cierto) o False (falso).
Dependiendo de ese valor, es ejecutado el ciclo. Si el valor es True, las
instrucciones dentro del ciclo se ejecutan. Si el valor es False, Visual Basic
ejecuta la instrucción que le sigue a la línea Loop. Esta expresión de control
también se conoce como “boolean expression”.
La línea DoEvents es esencial, pues le indica a
Visual Basic que en cada loop o ciclo espere unos segundos para recibir
mensajes a través de Windows. Sin esta línea, el Do While se ejecutaría tan
rápido que no sería posible hacer alguna entrada (input) al proyecto, asumiendo
que sea necesario el “input” en el ciclo (como en el ejemplo).
La línea Loop indica el final de las
instrucciones que están dentro del Do While loop. En este punto, Visual Basic
regresa a la línea donde comienza el Do While y verifica la expresión de
control. Si todavía es cierta la expresión, el ciclo se ejecuta nuevamente.
En el Do Until, se ejecutan las instrucciones hasta que la
expresión de control sea cierta.
Ej.:
Private Sub Command1_Click( )
Dim Control as Long
On Error
Resume Next
Control =
Text1.Text
Form1.BackColor
= vbWhite
Do Until
Control = 0
Label2.Caption
= “Valor: ” & Control
If
Form1.BackColor = vbWhite Then
Form1.BackColor
= vbRed
Else
Form1.BackColor
= vbWhite
End
If
Control
= Text1.Text
DoEvents
Loop
MsgBox
“Loop completado”
End Sub
En el ejemplo, las instrucciones
dentro del Do Until se ejecutan hasta que el valor entrado en el texto del
Text1 sea igual a cero. Se debe notar que la única línea que cambió fue la
línea del Do Until. Las otras instrucciones explicadas en el Do While (On Error Resume Next, DoEvents y Loop) cumplen las mismas
funciones en el Do Until.
Es importante señalar la
diferencia principal entre el Do While y el Do Until; en el primero el ciclo se
ejecuta mientras la expresión de
control es cierta, en el segundo el ciclo se ejecuta hasta que la expresión de control sea cierta.
Una característica en común que
tienen los dos ciclos presentados es que la expresión de control se verifica
antes de entrar al ciclo o “loop”. Si la condición para entrar al “loop” no se
cumple, el ciclo no se ejecuta.
Ejercicio de práctica:
1.
Crear una forma como la siguiente:
2.
Do While:
En el comando Ciclo con While, escribir el código
del ejemplo de Do While. Ejecutar el programa y observar que cuando se oprime
ese comando, la forma cambia de color continuamente. Escribir 0 (cero) para
terminar la ejecución.
3.
Do Until:
En el comando Ciclo con Until, escribir el código
del ejemplo de Do Until (en realidad, en ambos códigos sólo cambia la línea del
Do). Comprobar que la ejecución es igual a la del Do While.