Capítulo 5: Estructuras condicionales

Publicado por P. Ruiz en

Uso de la orden switch

La orden switch es una alternativa a if para los casos en los que tenemos una gran cantidad de opciones.

PowerShell-UD05-016

Dentro del paréntesis que acompaña a la orden switch deberemos incluir una variable o una expresión. A continuación, incluiremos los posibles resultados y, junto a cada uno de ellos, el bloque de instrucciones que deben ejecutarse si dicho valor coincide con el resultado de evaluar la variable o expresión de switch.

Si no coincide ninguno de los patrones, de forma opcional, podemos incluir la cláusula default con un bloque que se ejecutará por defecto.

Observa que, además de la pareja de llaves que engloba cada bloque de código, existe una pareja de llaves que engloba la estructura completa.

Veamos un ejemplo:

PowerShell-UD05-017

El resultado sería este:

PowerShell-UD05-018

Una de las características que diferencian a switch de if es que, en este caso, siempre se evalúan todos los patrones. Por ejemplo, observa el siguiente ejemplo en el que hemos repetido el valor 2:

PowerShell-UD05-019

Comprobamos que las condiciones no dejan de evaluarse después de la primera coincidencia:

Comprobamos que las condiciones no dejan de evaluarse después de la primera coincidencia:

PowerShell-UD05-020

Incluso podemos evaluar diferentes variables o expresiones al mismo tiempo. Sólo tenemos que incluirlas separadas por comas:

PowerShell-UD05-021

Observa que PowerShell ha encontrado dos coincidencias (una por cada variable):

PowerShell-UD05-022

Cuando necesitemos que, tras evaluar un determinado bloque, no se continúe evaluando ningún otro, podemos utilizar la orden break. Observa lo que pasa cuando la incluimos en el ejemplo anterior:

PowerShell-UD05-023

En el ejemplo, al evaluar el valor 2, ejecuta la orden break y se interrumpe la ejecución de switch:

PowerShell-UD05-024

Cuando hay más de dos instrucciones en un mismo bloque, lo normal es escribirlas en varias líneas (como hemos hecho en el ejercicio anterior. Sin embargo, también tenemos la opción de escribirlas en la misma línea separándolas con un punto y coma (;):

PowerShell-UD05-025

También es frecuente que el valor del patrón pueda obtenerse de una expresión más compleja pero, para que la sintaxis sea correcta, dicha expresión también debe incluirse en una pareja de llaves. En estos casos, el bloque de código se ejecutará cuando el resultado de la expresión sea $true. Veamos un ejemplo:

PowerShell-UD05-026

Al ejecutarlo, obtendríamos algo como esto:

PowerShell-UD05-027

Observa que, dentro de la expresión, el símbolo $_ está representado el resultado de evaluar la variable contenida en switch.

Por último, existen algunos modificadores que nos permiten actuar sobre la variable o expresión contenida en el switch:

PowerShell-UD05-028

Veamos un ejemplo:

PowerShell-UD05-029

Al probarlo, obtendríamos algo así:

PowerShell-UD05-030

Actividades resueltas: Trata de resolver las siguientes cuestiones, utilizando la estructura condicional switch, antes de consultar la respuesta:

    1. Escribe un script que solicite un carácter y nos diga si se trata de un dígito romano.

      Nota: Los caracteres con los que se forman los números romanos son: I, V, X, L, C, D y M. Se valorará que no se diferencie entre mayúsculas y minúsculas.

      PowerShell-UD05-038

    2. Escribe un script que, siguiendo el modelo de 6 continentes, pida al usuario un número entre 1 y 6.

      Según el número introducido, el programa contestará con las palabras América, Asia, Europa, África, Oceanía y Antártida, respectivamente.  Si el número es diferente, informará del error.

      PowerShell-UD05-039

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

      PowerShell-UD05-040

    4. Sabiendo que el siguiente ejemplo muestra el día de la semana al que pertenece la fecha que introduzca el usuario, pero representado como un valor entero, donde obtendremos un 0 para el domingo, 1 para el lunes, etc.

      Escribe un script que, dada una fecha, convierta el valor numérico en el texto que le corresponde.

      [datetime]$fecha = Read-­Host "Escribe una fecha (m-d-a)"
      Write-Host ("Día = " + ([int]$fecha.DayOfWeek))

      PowerShell-UD05-041