Capítulo 5: Estructuras condicionales
Uso de la orden if
Aunque la orden if puede tener una sintaxis más compleja, comenzaremos por su forma más sencilla. En ese caso, su formato es así:
Como habrás imaginado, el significado de sus elementos es este:
-
La palabra condición se refiere a una expresión lógica. Es decir, que al evaluarla se obtendrá un valor $true o $false.
-
Por su parte, el bloque de código será un conjunto de instrucciones que sólo se ejecutarán cuando la condición ofrezca el valor $true. El bloque de código se escribe siempre encerrado en una pareja de llaves.
Veamos un ejemplo:
En el ejemplo anterior, hemos utilizado una variable lógica para evaluar la expresión. Sin embargo, podríamos haber abreviado escribiendo la expresión directamente en la orden if. Así, nos ahorraríamos usar la variable $positivo:
De hecho, dentro del paréntesis podemos utilizar cualquier expresión válida que ofrezca un valor lógico. Además, hemos aprovechado para escribir el if de una forma más bonita…
Esto nos ahorraría también la variable $número… Pero quizás sea mejor mantener el código más legible.
En definitiva, todos los ejemplos anteriores son equivalentes. Cuando los ejecutes, si escribes un número positivo, el script te contestará con el texto El número es positivo. Y si escribes un número negativo, no aparecerá nada.
Uso de la orden if con else
Añadiendo else a la orden if, podremos incluir un bloque de código que sólo se ejecute cuando la condición sea falsa. En ese caso, su formato es así:
Veamos un ejemplo:
Como ves, ahora el script siempre contesta, indicándonos si el número que hemos escrito es positivo o negativo.
Uso de la orden if con elseif
En situaciones donde tenemos más de dos alternativas, podemos incluir elseif para atender todas las posibilidades. En ese caso, su formato es así:
En este caso, puedes utilizar tantos elseif como requiera el problema que estés resolviendo.
Veamos un ejemplo: Imagina que necesitas obtener una respuesta del usuario y debes tener en cuenta que éste no escriba ninguna de las respuestas esperadas. Podríamos hacerlo así:
En realidad, podríamos haber simplificado las condiciones si no diferenciáramos entre minúsculas y mayúsculas:
El inconveniente es que, ahora, pueden darse respuestas que no habíamos tenido en cuenta al principio. Por ejemplo, SI ó sI.
Otra opción sería utilizar el método IndexOf que ya conocemos del capítulo anterior:
La ventaja de este método es que, si queremos añadir nuevas opciones de respuesta afirmativa o negativa, sólo tenemos que modificar las variables correspondientes, sin complicar la lógica del programa.
Actividades resueltas: Trata de resolver las siguientes cuestiones, utilizando la estructura condicional if, antes de consultar la respuesta:
-
Escribe un script que pida al usuario un número entre 1 y 3. Según el número introducido, el programa contestará con uno de los colores de un semáforo (1 = rojo, 2 = ámbar, 3 = verde). Si el número es diferente, informará del error.
-
Escribe un script que pida dos números al usuario y nos diga cuál es el mayor. Intenta que también detecte cuando sean iguales.
-
Escribe un script que pida tres números al usuario y nos diga cuál es el mayor.
Nota: en cada orden if deberás comparar sólo dos números y tratar de obtener el menor número de comparaciones posibles.
Si no tenemos en cuenta la restricción del enunciado y comparamos más de dos números en cada if, el resultado sería algo como esto:
… Pero si queremos cumplir con la restricción impuesta, deberíamos escribir algo como esto:
Como ves, el segundo resultado nos ofrece un mayor detalle sobre la salida, porque podemos averiguar cuándo dos de los números son iguales..
-
Escribe un script que solicite un número al usuario y responda si el número es par o impar.
-
Escribe un script que solicite un número al usuario y averigüe si es positivo, negativo o cero.
Al utilizar la orden read-host, es muy común que necesitemos asegurarnos de que el dato introducido por el usuario se corresponde con el tipo adecuado.
Hasta ahora, hemos utilizado el amoldamiento (casting), como en el último ejercicio anterior. Sin embargo, en los casos en los que el amoldamiento no sea posible, la ejecución produce un error que afea nuestro resultado.
Es evidente que, si consiguiésemos interceptar el posible error, el proceso sería mucho más limpio. Ese es el trabajo del método TryParse, que trata de convertir una cadena a otro tipo de dato, devolviendo un valor lógico que indica si la conversión se ha producido con éxito, sin generar errores.
Aquí tienes un ejemplo sencillo de cómo usarlo:
En el ejemplo anterior, usamos el método TryParse, de la clase int32 aunque, en realidad, encontraremos un método con el mismo nombre en todas las clases de los tipos de dato básicos.
Por otro lado, usamos [ref] delante de $numeroEntero para enviar su referencia, en lugar de su valor, al método TryParse. De este modo, el método puede modificar su valor, directamente, si la conversión es exitosa.