TEMA
about_Switch
DESCRIPCIÓN BREVE
Explica cómo se utiliza una instrucción Switch para administrar varias
instrucciones If.
DESCRIPCIÓN DETALLADA
Una instrucción if permite tomar una decisión en un script o un
programa. Básicamente, esta instrucción dice: "Si se cumple esta
condición, realice esta acción. En caso contrario, realice esta
otra". Puede llevar a cabo esa operación tantas veces como desee,
pero si las condiciones son muchas, una instrucción If resulta
poco manejable. Puede combinar una larga lista de condiciones en una
instrucción Switch. Como en todas las instrucciones de bifurcación,
los bloques de script deben escribirse entre llaves ({}).
En realidad, una instrucción Switch es una serie de instrucciones
If. Comprueba si la expresión coincide con cada una de las condiciones,
caso por caso. Si encuentra una coincidencia, se realiza la acción
asociada a dicha condición. Una instrucción Switch básica tiene el
siguiente formato:
PS> $a = 3
PS> switch ($a) {
1 {"Es el número uno."}
2 {"Es el número dos."}
3 {"Es el número tres."}
4 {"Es el número cuatro."}
}
Es el número tres.
En este sencillo ejemplo se toma un valor y se compara con cada
condición de la lista. La acción repite una cadena de la
coincidencia. Pero podría tener un problema si activa todas las
condiciones. Por ejemplo:
PS> $day = "day5"
PS> switch ($day){
day1 {"Lunes"; break}
day2 {"Martes"; break}
day3 {"Miércoles"; break}
day4 {"Jueves"; break}
day5 {"Viernes"; break}
day6 {"Sábado"; break}
day7 {"Domingo"; break}
day5 {"Demasiados días"; break}
}
Viernes
La lista contiene dos condiciones day5. Sin embargo, la
instrucción break al final de cada condición indica a la
instrucción switch que deje de buscar más adelante y realice la
acción que encuentre. Si se quitaran las instrucciones break,
se realizarían ambas acciones day5.
Si el valor al que se aplica la instrucción switch es una matriz,
se evaluará cada elemento en orden, comenzando por el elemento 0
(cero). Debe haber al menos un elemento que cumpla como mínimo
una condición; de lo contrario, se generará un error. Si hay más
de una cláusula predeterminada, se producirá un error.
La sintaxis completa de la instrucción switch es la siguiente:
switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline )
O bien
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
seguido de
{
"cadena"|number|variable|{ expression } { statementlist }
default { statementlist }
}
De forma predeterminada, si no se usan parámetros, la instrucción
Switch se comporta como si hubiera una coincidencia exacta sin
distinción entre mayúsculas y minúsculas. Si el resultado de
"pipeline" es una matriz, cada elemento de la matriz se evaluará
en orden de desplazamiento ascendente (empezando por 0 [cero]).
El bloque de código de la instrucción Switch debe contener un elemento
condicional como mínimo, y solo puede haber una cláusula
predeterminada. Si hay más de una cláusula predeterminada,
se producirá una excepción ParseException.
La instrucción Switch tiene los parámetros siguientes:
Regex Indica que la cláusula de coincidencia,
si es una cadena, se trata como una cadena regex.
El uso de este parámetro deshabilita Wildcard y Exact.
Si la cláusula de coincidencia no es una cadena,
se omite este parámetro.
Wildcard Indica que la cláusula de coincidencia, si es una cadena,
se trata como una cadena comodín. El uso de este parámetro
deshabilita Regex y Exact. Si la cláusula de coincidencia
no es una cadena, se omite este parámetro.
Exact Indica que la cláusula de coincidencia, si es una cadena,
debe coincidir exactamente. El uso de este parámetro
deshabilita Wildcard y Regex. Si la cláusula de coincidencia
no es una cadena, se omite este parámetro.
CaseSensitive Modifica la cláusula de coincidencia, si es una cadena,
para que distinga entre mayúsculas y minúsculas.
Si la cláusula de coincidencia no es una cadena,
se omite este parámetro.
File Obtiene la entrada de un archivo (o representante) en lugar
de una instrucción. Si hay varios parámetros File, se usa
el último. Cada línea del archivo se lee y se recorre
por el bloque de la instrucción switch.
Se permite el uso de varios parámetros Regex, Wildcard o Exact.
Sin embargo, solo el último parámetro utilizado rige el comportamiento.
La palabra clave Break indica que no se continúa el procesamiento
y que la instrucción Switch se cerrará.
La palabra clave Continue indica que no se continúa el procesamiento
respecto al símbolo (token) actual y que se evaluará el siguiente
símbolo de la condicional. Si no hay ningún símbolo disponible,
la instrucción Switch se cerrará.
El bloque "{ expression }" puede ser un bloque de código que se
evaluará en el momento de la comparación. El objeto actual está
enlazado a la variable automática $_ y está disponible durante la
evaluación de la expresión. Una comparación se considera una
coincidencia si la expresión se evalúa como "True". Esta
expresión se evalúa en un nuevo ámbito.
La palabra clave "Default" de la instrucción switch indica que si
no se encuentran coincidencias, se evaluará el bloque de código
que sigue a la palabra clave. No se permitirá el flujo del
programa de un bloque a otro porque la llave de cierre ( } ) en
la lista compuesta es una instrucción break explícita.
Si se encuentran varias coincidencias, cada una de ellas dará
lugar a la ejecución de la expresión. A fin de evitar esto,
pueden usarse las palabras clave Break o Continue para detener las
comparaciones.
VEA TAMBIÉN
about_Break
about_Continue
about_If
about_Script_Blocks