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