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
com 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 intrucciones 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.
![]()