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.