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




Tabla de contenido