Continuando con las
condiciones...
En
el capítulo anterior vi que el sistema de condiciones tiene un sistema de
estructura algo así:
- Si una condición es
verdadera, muestra un resultado.
Es
muy común estar evaluando al menos dos valores, así como los ejemplos
presentados en el capítulo anterior, donde se solicitaba ingresar la edad de
una persona. Si la edad ingresada es mayor o igual a 18, entonces se mostraba
el mensaje "Eres mayor de edad". Para evaluar el caso contrario, se
volvió a escribir la instrucción if, pero esta vez para evaluar si la edad
ingresada es menor a 18. En casos como estos, donde se evalúa un caso y luego
se evalúa el caso contrario, existe una instrucción que permite el ahorrar un
poco de código para no tener que escribir la instrucción if nuevamente. Esta
instrucción se denomina "else" (de lo contrario) y se utiliza
justamente para evaluar un caso contrario. La instrucción else, no hace nada
nuevo, simplemente permite abreviar en cierta forma, otra instrucción if.
Siguiendo
el ejemplo del programa para la mayoría de edad. Con la instrucción else,
quedaría de la siguiente manera:
TextWindow.Write("Cual
es tu edad? ")
edad = TextWindow.ReadNumber()
If edad >= 18 Then
TextWindow.WriteLine("Eres mayor de
edad")
Else
TextWindow.WriteLine("Eres menor de
edad")
EndIf
Como
se puede apreciar, al escribir else, se acortó la cantidad de código en el
programa y al ejecutarlo, hace exactamente lo mismo. Cabe destacar, que para poder
ocupar la instrucción else, debe haber una instrucción if que lo preceda y esta
instrucción else, dependerá directamente de la instrucción if más cercana que
lo precede.
Diario de un programador.- Dia 19
Voy
a tratar de mejorar un poco el programa anterior para controlar que la edad
ingresada no sea un número muy alto o muy bajo, ya que sería un tanto ilógico
si se ingresa 500 como una edad válida. Veré si resulta esto.... Bueno, después
de algunos minutos, logré esta alternativa de código que realiza lo que estaba
buscando, o sea que al ingresar un número muy grande o negativo, muestra su
respectivo mensaje y de paso hace algo nuevo, vuelve a solicitar que ingrese un
valor válido. Para lograr que repita esa acción, utilicé la súper menospreciada
instrucción "goto" (ir a) Es tan menospreciada esta instrucción que
muchos lenguajes de programación no la permiten (más información aquí) En resumidas cuentas, lo
que hace esta instrucción es ir o trasladar el flujo del programa, hasta la
línea indicada por una marca o etiqueta. Logrando con ello, que se produzcan
grandes saltos, tanto hacia adelante como hacia atrás en lo referente a las
líneas de código, por ejemplo, si el programa va ejecutando la línea 50 de su
código y una instrucción goto le indica que "salte" a la línea 5,
entonces el programa seguirá su curso o flujo en la línea 5, de igual forma si
se le indica que "salte" o se traslade a otra línea más adelante
dentro del programa. Esta facilidad para trasladarse dentro del programa, le
dio en parte su mala fama, debido a que en programas más grandes, como de cinco
mil o cien mil líneas, se complicaba enormemente el estar siguiendo todos esos
saltos que pudiese tener al momento de realizar una mantención al código.
Bueno, como estoy aprendiendo a codificar, no me puedo permitir el dejar fuera
cualquier alternativa que me pueda servir en algún momento y aunque he leído
que no debo usar el goto, haré caso omiso a esas recomendaciones, aunque si
debo reconocer que no lo usaré muy seguido, quizás para no formar un mal
hábito.
El
código es el siguiente:
inicio:
TextWindow.Write("Cual es tu edad? ")
edad = TextWindow.ReadNumber()
If edad
>= 18 Then
If edad >=120 Then
TextWindow.WriteLine("La edad ingresada es muy alta")
Goto
inicio
EndIf
TextWindow.WriteLine("Eres mayor de edad")
Else
If
edad < 0 Then
TextWindow.WriteLine("La edad no puede ser un numero
negativo")
Goto
inicio
EndIf
TextWindow.WriteLine("Eres menor de edad")
EndIf
Este
código, si es ejecutado, hace lo mismo que el anterior, a diferencia que si
coloco un dato que no corresponde (edad) entonces me volverá a solicitar que
ingrese la edad.
En
la primera línea se encuentra la etiqueta a la cual apunta la instrucción
"goto", esta etiqueta puede ser un nombre cualquiera, es solo un
identificador, pero por sintaxis debe terminar en dos puntos ":" Los
dos puntos es lo que la diferencia de una variable, de no llevar esos puntos,
el programa "pensaría" que en vez de ser una etiqueta, se trata de
una variable. Al colocar la etiqueta en la primera línea, lo que digo o estoy
tratando de decir es que el programa debe continuar desde aquí cuando llegue a
la instrucción goto correspondiente. Al colocar la etiqueta en la primera
línea, es lo que permite que el programa vuelva a solicitar nuevamente los
datos.
En
esta parte del código hay algo nuevo...
If edad
>= 18 Then
If edad >=120 Then
TextWindow.WriteLine("La edad ingresada es muy alta")
Goto
inicio
EndIf
Aquí se pude ver una instrucción if dentro de otra instrucción if, a
esta situación se le conoce como "anidar" o sea que la instrucción If edad >=120 Then está anidada o dentro de la instrucción if anterior. Al principio me costó
bastante entender eso de las anidaciones, pero con un poco de práctica y leer
varias veces las descripciones, fui entendiendo bien este asunto. La gracia de
todo esto es que, al estar anidada, esta instrucción se ejecutará unicamente si
la instrucción anterior (if edad >= 18 then) es verdadera. O sea que primero
se tiene que cumplir que la edad ingresada sea mayor o igual a 18, si eso es
así, entonces la siguiente línea evalúa si la edad es mayor o igual a 120, si
esto ocurre, entonces se ejecuta la línea siguiente que dice que la edad es muy
alta. Si se ejecutó esta línea, significa que la edad fue un número igual o
superior a 120, por lo que se ejecutará la linea siguiente, la que contiene la
instrucción goto...
If edad >=120 Then
TextWindow.WriteLine("La edad ingresada es muy alta")
Goto
inicio
EndIf
Recordar
que se ejecutará todo lo que se encuentre entre el if y el endIf (aunque con el
goto, pueden haber excepciones, ya lo explicaré) la instrucción goto va seguida
de su etiqueta, en este caso estoy diciendo "ve a donde se encuentra la
etiqueta inicio" con esto logro que el programa se vuelva a iniciar ya que
de esta forma obligo al usuario a ingresar un número válido. Aprovecharé de
explicar el por qué de las "excepciones con goto". Mira el siguiente
ejemplo...
If edad >=120 Then
TextWindow.WriteLine("La edad ingresada es muy alta")
Goto
inicio
TextWindow.WriteLine("Esta linea no se lee :(")
EndIf
La
línea que contiene el goto, hace que el programa "salte" inmediatamente
hacia la línea que contiene la etiqueta, ignorando lo que hay después del goto,
en este caso, la línea siguiente ("Esta linea no se lee :(") nunca se mostrará en
pantalla
Diario de un programador.- Dia 20
En la segunda parte
del código tengo la instrucción else ("de lo contrario")
Else
If
edad < 0 Then
TextWindow.WriteLine("La edad no puede ser un numero
negativo")
Goto
inicio
EndIf
TextWindow.WriteLine("Eres menor de edad")
EndIf
Aquí
coloco la condición para que no acepte números negativos en el ingreso de edad
(if edad < 0 then) Si esto ocurre, entonces se muestra el mensaje "La
edad no puede ser un número negativo" y posteriormente la instrucción goto
realiza un salto al inicio del programa.
No hay comentarios:
Publicar un comentario