Capítulo 5: Estructuras condicionales

Publicado por P. Ruiz en

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í:

PowerShell-UD05-001

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:

PowerShell-UD05-002

El resultado que obtendríamos sería parecido a este:

PowerShell-UD05-003

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:

PowerShell-UD05-004

… Y el resultado sería similar:

PowerShell-UD05-005

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…

PowerShell-UD05-006

… Y el resultado seguiría siendo equivalente:

PowerShell-UD05-007

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í:

PowerShell-UD05-008

Veamos un ejemplo:

PowerShell-UD05-009

El resultado obtenido sería este:

PowerShell-UD05-010

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í:

PowerShell-UD05-011

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í:

PowerShell-UD05-012

El resultado podría ser como este:

PowerShell-UD05-013

En realidad, podríamos haber simplificado las condiciones si no diferenciáramos entre minúsculas y mayúsculas:

PowerShell-UD05-014

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:

PowerShell-UD05-015

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:

    1. 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.

      PowerShell-UD05-031

    2. 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.

      PowerShell-UD05-032

    3. 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:

      PowerShell-UD05-033

      … Pero si queremos cumplir con la restricción impuesta, deberíamos escribir algo como esto:

      PowerShell-UD05-034

      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..

    4. Escribe un script que solicite un número al usuario y responda si el número es par o impar.

      PowerShell-UD05-035

    5. Escribe un script que solicite un número al usuario y averigüe si es positivo, negativo o cero.

      PowerShell-UD05-036

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:

PowerShell-UD05-037

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.