¿Que es una condición?.
Este tema profundizará en el tema de los condicionales, que hemos visto en capítulos anteriores, y abordaremos los bucles que usaremos en nuestro próximo tema que será la primera práctica del curso: continuaremos con el proyecto Videoclub
No podemos empezar el tema, aunque ya hayamos vistos los condicionales rápidamente, debemos de establecer como primer paso, qué es un condicional o una condición. En programación llamamos condición a la acción que se ejecuta si hemos podido elegir entre varias opciones. Por ejemplo, si en el mercadillo, en una frutería, tienes en una cesta manzanas Golden, y en otra cesta tienes manzanas Reineta. Si coges manzanas Golden el frutero te cobrará un precio distinto al que te pondría si cogieses manzanas Reineta.
Esto puede parecer un poco complicado, pero cuando aprendas a usar condicionales te va a resultar bastante sencillo realizar tus propias condiciones.
En Visual Basic.NET existen muchos tipos de condicionales más los que puedes crear programando instrucciones, pero en este curso solo vamos a ver los dos condicionales más usados por los programadores, el condicional IF THEN y el SELECT CASE.
Cada uno de ellos es bueno en ciertas circunstancias del proyecto y malo para otras. Empezaremos con el estudio de IF - THEN, y terminaremos estudiando los SELECT CASE para que así puedas ver que condicional se adapta mejor en tus futuras aplicaciones.
Condicional IF - THEN.
Esta estructura condicional es un código que permite al usuario realizar varias acciones según asigne unos valores dentro de la instrucción del comando. Es decir, que el programa realizará una acción u otra dependiendo del valor que se asigne al condicional. La estructura del condicional compuesto es la siguiente:
Este condicional pertenece a los condicionales simples de Visual basic.NET y conlleva un evento de validación de tipo Bolean, es decir, solo puede ser TRUE o FALSE. Esto indica que cada condición que se haga será exclusiva de la condición Si o No:
Como se puede apreciar, en este proyecto de Windows Form, cuando ejecutes el formulario, se mostrará una ventana en la cual te pedirá que insertes una edad. Dependiendo del número se mostrará un mensaje u otro. Pero veamos en detalle este ejemplo. Todo el programa se ejecuta dentro del proceso principal del formulario, lo que cuando el formulario se cargue interpretará el contenido de su subproceso.
En la primera línea Dim numero As Integer = InputBox("¿Cuántos años tienes?", "Edad", numero)
, estamos habilitando un control que mostrará una ventana en la cual le pide al usuario la inserción de texto y que pertenece al espacio de nombres Microsoft.VisualBasic, y asignándola a una variable del tipo Integer para después usar el valor obtenido.
En la segunda línea tenemos la estructura básica del condicional. If numero <=18 then
, establece que si el valor de la variable número que asigne el usuario es menor o igual a 18, saltará a la siguiente línea y se ejecutará la instrucción siguiente, MsgBox ("Tienes menos de 18 años", VbInformation, "Aún eres un niño)
.
Si por el contrario, el usuario selecciona un número superior a 18, el CLR comprueba que la sentencia If inicial devuelve un FALSE (ya que el número elegido por el contrario es diferente al esperado por TRUE, por lo que, en la cuarta línea, Else, hace que se cargue la reacción del condicional.
Este condicional, podrás apreciar que es demasiado soso. Solo permite dos únicas respuestas, por lo que si necesitamos agregar mas respuestas y mas soluciones, no es capaz de solvertarnos este problema. Los desarrolladores de .NET comprendieron el problema al usar este condicional y pusieron pronto la solución al mismo, si bien, no es una alternativa a otros tipos de condicionales para ciertas funciones, solventa mucho el problema anterior. Introdujeron las anidaciones del condicional:
Mediante el uso de la instrucción ELSEIF, se podía seguir la lógica del condicional sin que se pasara a ELSE, lo que permite cargar mas situaciones.
En la cuarta línea se ha introducido una instrucción ELSEIF con una nueva acción. Ahora ya he ampliado el rango de acción del usuario; si introduce otro valor distinto al de la primera condición, saltará a la siguiente línea y ejecutará el ELSEIF siempre que el valor introducido devuelva en el control del condicional un TRUE. En caso de que devuelva un FALSE, ejecutará la instrucción desde el ELSE. Pero creo que aún podemos hacerlo algo mejor esta estructura si terminamos correctamente el ejercicio, ya que la instrucción ELSE devolverá un TRUE para valores del usuario superiores a 65, lo que nos dice que podría marcar hasta el máximo del valor del Integer en cifras, cosa que no quedaría bien decir que "Eres un viejete" con mas de casi veintidos millones de años.
La forma de solucionar esta condición equivocada es añadir otra línea ELSEIF dentro del programa como te muestro a continuación:
En este ejemplo, si introduces un número superior a 121, se te mostrará el mensaje "¿Te crees inmortal?". Como puedes ver hemos utilizado dos ELSEIF para establecer dos estados y hemos anidado un condicional IF THEN para establecer el último paso. Aunque perfectamente se podría poner otra condición ELSEIF, he decidido anidar un condicional para que veas el uso de este control y como proceder a anidarlo.
Para el condicional.
A veces ocurre que deseas interrumpir el condicional para que no se ejecute la línea siguiente. Para ello recurrimos a la instrucción RETURN. Esta instrucción hace que el CLR de Visual Basic.NET retorne a un estado anterior y se salga del bucle o del condicional. Para ver su funcionamiento, usaremos dicha instrucción en un bucle.
En este bucle sencillo, cuando ejecutemos la aplicación mostrará una serie de ventanas con un número diferente del 1 al 10, es decir, nos mostrarán diez ventanas de aviso, una detrás de otra según pulsemos el botón de Aceptar.
Imagina que quieres hacer que cuando llegue el programa al número 5, termine la cuenta. Para esto, debemos de utilizar un condicional junto a la instrucción RETURN de la manera que se muestra a continuación.
Como puedes ver, el condicional está dentro del bucle, ya que lo que queremos es que se detenga el bucle cuando llegue al número 5. Si lo ejecutas verás que cuando llega al cinco, se termina el bucle y te muestra el formulario. Mas adelante veremos los condicionales en detalle.
SELECT CASE.
Este condicional es uno de mis favoritos, porque te ofrece muchas más posibilidades que el anterior IF THEN. La sintaxis de éste condicional es la siguiente:
Como puedes ver, este condicional te permite establecer tantas condiciones como quieras, y solo debes de escribir la acción dentro de cada instrucción CASE. Eso sí, ahora debes de matizar más en el valor de la instrucción y llamar correctamente a la instrucción al declarar el SELECT CASE, ya que los demás CASE deberán de estar relacionados entre sí, ya que debes de programar el cada CASE en relación al tipo de variable inicial en el SELECT CASE.
Así que si continuamos el programa anterior, podremos establecer en cada CASE una condición específica como la de que, según el rango de edad, aparezca un mensaje u otro.
Por lo que según escoges una opción te aparecerá un mensaje u otro, parándo el bucle de la lectura cuando se ejecute dicho bloque. Por ejemplo si escribimos un número menor de 18 entonces nos aparecera el primer mensaje.
Al igual que el anterior condicional, la condición puede no tener ninguna respuesta posible, en dicho caso se suele programar una alternativa en caso de que ninguna respuesta sea correcta. Para eso está la instrucción CASE ELSE, en la cual si no se da ninguna condición en el SELECT CASE de cada bloque CASE, salta el CASE ELSE y ejecuta dicho bloque.
Bucles
Un bucle es una acción repetitiva un número limitado o ilimitado (según la programación necesaria), y que terminará cuando se de una condición específica para su finalización.
Por lo tanto un bucle debe de tener:
● Una condición que devuelva un TRUE.
● Una serie de repeticiones hasta que se cumpla dicha condición.
En el siguiente ejercicio puedes ver un bucle FOR que muestra un cuadro de texto de acuerdo al número que escojas en el InputBox.
Existen varios tipos de bucles, siendo el más famoso por los desarrolladores de VB.NET el bucle FOR.
Como puedes ver el bucle FOR empieza por un bloque con inicio FOR y final NEXT y dentro del mismo se introduce la instrucción que se quiere repetir. Por lo cual si introducimos dentro del bloque FOR un aviso de mensaje como el anterior, se va a repetir el bucle de acuerdo al valor escogido en el inputBox por el usuario.
También puedes ver que el bucle debe de estar asignado a un rango o valor de inicio y final (y también se puede agregar pasos de ejecución).
Otros bucles.Existen otras variaciones del bucle FOR, como por ejemplo el bucle DO.
Este bucle se caracteríza porque repite un número de veces la instrucción contenida en el bucle hasta que se cumpla una condición.
En el anterior ejercicio establecemos una variable numero del tipo integer, asociada al valor introducido en un TextBox. El bucle empieza por DO y termina por LOOP y en el interior del mismo se pone la acción repetitiva. En este caso lo que programo es que el valor de la variable numero aumente un valor cada vez que se lee (que se incremente en uno). ¿Hasta cuándo se ejecutarán los MsgBox? pues hasta la condicion devuelva un TRUE y que, como puedes ver la condición se establece en la línea del LOOP con el atributo UNTIL, en donde ponemos que el valor de la variable numero sea mayor de 10.
En este caso, la condición se ha dado en la parte inferior del bloque DO - LOOP, pero puede ocurrir que necesites que la condición que evalúe las repeticiones esté en la parte superior del bloque. Para ello se utiliza la sentencia de WHILE.
Bueno, vamos a dejarlo por ahora. En este capítulo he decidido no incluir práctica para no saturar al alumno, pero a partir de ahora empezaremos a usar condicionales y bucles y haré una pequeña explicación del mismo cuando proceda si fuese necesario. Ahora visita el VÍDEO del capítulo.
Gracias.