Curso Básico de Programación
en Visual Basic


Apéndice a la Quinta Entrega: 29/Jul/97.

por Guillermo "guille" Som

Te recomiendo que leas las entregas anteriores, aquí tienes los links:
La Primera, la Segunda, la Tercera, la Cuarta y la Quinta.


Ya sabes que mi segundo nombre es: DESPISTE, si no lo sabías, ahora lo sabes...

Y es que con tanta explicación de la Quinta Entrega, al final expliqué cosas, pero no todo.
Al final de la Cuarta Entrega se hicieron una serie de cambios al programa ese de los bucles. La explicación de la utilidad de todo ese código es, en términos generales, para cancelar en cualquier momento el programa.
¿Cómo?
Hemos declarado Contando a nivel de módulo, por tanto será visible en todo el form.
Cuando se declara una variable, el VB le asigna siempre un valor predeterminado, en caso de las cadenas de caracteres (string) ese valor es "" (cadena vacía); a los números se le asigna un valor CERO. Por tanto, al iniciar el programa, la variable Contando valdrá CERO, así que la primera vez que se pulse en el botón Command1 y se compruebe esto:
If Contando Then...
Ah, si... no he explicado para que sirve esto del If...Then...
Las instrucciones If/Then se usan para comprobar si la 'expresión' que se usa después del IF se cumple o no...
En caso de que se cumpla (sea cierta), se ejecutará todo lo que haya después de THEN... algo así:

IF <EXPRESIÓN> THEN <INSTRUCCIONES>

También puede usarse de esta otra forma:

IF <EXPRESIÓN> THEN
    <INSTRUCCIONES>
    [<MÁS INSTRUCCIONES>]
END IF

En la primera forma de uso, las instrucciones se ponen a continuación de THEN como en el caso de:
If Contando = 0 Then Exit For
En la otra forma de usarlo, las instrucciones se ponen en las siguientes líneas y podemos escribir tantas líneas como queramos. Todas se intentarán procesar...
Esto para el caso de que al evaluar la expresión se cumpla como verdadero.
En las ocasiones en las que no se cumple la expresión se hará lo siguiente, según la forma de usar el IF/THEN:
--En el primer método, se procesan las instrucciones que hay en la siguiente línea y se continúa a partir de ahí el programa.
--En el segundo caso, se busca END IF y se continúa por la siguiente línea...

Más adelante, en otra entrega, veremos otras formas de usar IF...THEN...

Ahora voy a explicar un poco esto de la evaluación de las expresiones.
El IF espera encontrar un valor CERO (FALSO) o un valor distinto de cero (por extensión VERDADERO)
En If Contando = 0 Then Exit For,
la expresión es Contando = 0, aquí no se está usando la asignación, sino que se está evaluando si el contenido de la variable Contando es igual a cero; en caso de que sea cierto, es decir que Contando valga cero, (algunas veces me maravillo de mi lógica aplastante...), se devuelve un valor Verdadero (TRUE).
Por otra parte si Contando NO vale cero, se devolverá un valor Falso (FALSE, CERO).

En otros lenguajes se usa un símbolo distinto para el igual, según sea una asignación o una comparación.
En Pascal (Delphi) la asignación es
:= y la comparación es =
En C, C++, la asignación es
= y la comparación == (esto del == puede 'sonarte' si has hecho algo con JavaScript)

En el caso de If Contando Then, al no haber una expresión que evaluar, lo que se comprueba es si el contenido de la variable es cero o no es cero, en caso de que sea NO CERO, se cumple la condición y se procesa todo lo que viene a continuación; pero si la variable vale CERO, el IF lo interpretará como FALSO y pasa a ejecutar lo que haya a continuación de End If.

Por tanto, (volviendo por fin al listado), la primera vez que se pulse en el botón Command1 y se compruebe esto:
If Contando Then
No se cumplirá la condición, ya que el contenido de Contando es cero, y se pasará a lo que hay después del End If, es decir a:
Contando = 1
y se continúa con el programa como antes de añadir todas estas cosas...

Pero, si pulsas de nuevo en el botón, se vuelve a procesar lo que hay dentro de Command1_Click, (esto es posible porque al usar DoEvents, permitimos que Windows siga recibiendo y procesando 'tiritos'), pero cuando entramos por segunda vez, Contando vale 1 (uno), (ya que al ser una variable a nivel de módulo conserva el último valor que hayamos asignado), y esta vez al evaluar:
If Contando Then
si se cumple, así que se procesan las líneas que vienen a continuación... entre ellas está Contando = 0 y DoEvents que vuelve a permitir a Windows que las otras cosas que antes de pulsar en el botón continúen ejecutándose, (esto se hace de forma asíncrona, es decir, Windows se da por enterado y da los avisos (mensajes) cuando quiera), pero continúa con la siguiente instrucción sin esperar a que esos mensajes se terminen de procesar, entonces se encuentra con el Exit Sub que lo manda fuera del evento... (
Si no te ha quedado demasiado claro, no te preocupes veremos más de esto a lo largo del curso...)

En caso de que hayamos pulsado el botón cuando aún no había terminado todo lo que este Sub estaba haciendo, se continúa igual que si se hubiese hecho PAUSA y después PLAY.
Con la salvedad de que si VB se encuentra con alguno de los If Contando = 0 Then Exit Sub, dejará de procesar y se saldrá del procedimiento... Esta no es la mejor forma de cancelar una tarea ya iniciada, pero algo es algo...
También es posible que al pulsar por segunda vez en el botón, se estuviese dentro del Sub Contar, en este caso, también se evaluaría la expresión y se saldría del procedimiento... así que también dejaría de procesarse todo.

Cuando pulsemos por tercera vez... iniciaremos el proceso de nuevo...

 

Bueno, ahora si que puedo dar por terminada la Quinta Entrega.
Nos vemos.


 

entrega anterior ir al índice siguiente entrega

Ir al índice principal del Guille