ARGOMENTO
    about_Switch

DESCRIZIONE BREVE
    Illustra come utilizzare un'istruzione Switch per gestire più 
    istruzioni If.

DESCRIZIONE DETTAGLIATA
    Un'istruzione If consente di decidere se eseguire determinate 
    azioni in uno script o in un programma. In sostanza, equivale a 
    imporre al codice un'alternativa: se una data condizione esiste, 
    deve essere eseguita tale azione; se non esiste, deve essere 
    eseguita un'altra azione. È possibile eseguire l'operazione il 
    numero di volte desiderato, ma se l'elenco di condizioni è molto lungo 
    l'istruzione If diventa poco pratica. È possibile combinare un lungo 
    elenco di condizioni in un'istruzione switch. Come in tutte le 
    istruzioni di diramazione, i blocchi di script devono essere racchiusi tra parentesi graffe ({}).

    Un'istruzione Switch è, in effetti, una serie di istruzioni If. Quando 
    eseguita, confronta l'espressione con ciascuna delle condizioni caso 
    per caso. Se viene trovata una corrispondenza, viene eseguita 
    l'azione associata alla specifica condizione. Un'istruzione switch di 
    base ha il seguente formato:

        PS> $a = 3
        PS> switch ($a) {
            1 {"It is one."}
            2 {"It is two."}
            3 {"It is three."}
            4 {"It is four."}
            }
        
        It is three.


    In questo semplice esempio, un valore viene confrontato con ciascuna 
    condizione in elenco. L'azione consiste nella restituzione di una 
    stringa dalla corrispondenza. Se, però, vengono confrontate tutte le 
    condizioni, si può verificare un problema. Ad esempio:

        PS> $day = "day5"
        PS> switch ($day){
            day1 {"Monday"; break}
            day2 {"Tuesday"; break}
            day3 {"Wednesday"; break}
            day4 {"Thursday"; break}
            day5 {"Friday"; break}
            day6 {"Saturday"; break}
            day7 {"Sunday"; break}
            day5 {"Too many days"; break}
            }
        
        Friday


    Nell'elenco compaiono due condizioni day5. Tuttavia, tramite 
    l'istruzione break alla fine di ciascuna condizione si impone 
    all'istruzione switch di non proseguire oltre nella ricerca di 
    corrispondenze e di eseguire l'azione rilevata. Se non fosse 
    stata specificata alcuna istruzione break, verrebbero eseguite 
    entrambe le azioni specificate nelle condizioni day5. 

    Se il valore in base al quale eseguire l'istruzione switch è una 
    matrice, verrà valutato nell'ordine ciascun elemento della 
    matrice a partire dall'elemento 0 (zero). Se nemmeno un elemento 
    soddisfa almeno una condizione, viene restituito un errore. Se 
    esistono più clausole default, viene restituito un errore.

    La sintassi completa dell'istruzione switch è la seguente:

        switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline ) 
    oppure

        switch [-regex|-wildcard|-exact][-casesensitive] -file nomefile

    seguita da

        { 
            "string"|number|variable|{ expression } { statementlist } 
            default { statementlist } 
        }

    
    Per impostazione predefinita, se non viene utilizzato alcun parametro, 
    l'istruzione Switch funziona come in presenza di una corrispondenza 
    esatta senza rilevanza della distinzione tra maiuscole e minuscole. 
    Se "pipeline" restituisce una matrice, ciascun elemento della matrice 
    verrà valutato in ordine di offset ascendente (a partire da 0 [zero]).  

    Nel blocco di codice Switch deve essere presente almeno un elemento 
    condizionale e una sola clausola default. Se esistono più clausole 
    default, viene restituita un'eccezione ParseException.

    L'istruzione switch accetta le seguenti opzioni:

        Regex	        Indica che la clausola di 
                        corrispondenza, se è una stringa, viene considerata come una 
                        stringa regex. Se si utilizza questo parametro, vengono 
                        disabilitati i parametri Wildcard ed Exact. Se la clausola di 
                        corrispondenza non è una stringa, viene ignorato questo parametro.

        Wildcard	Indica che la clausola di corrispondenza, se è una 
                        stringa, viene considerata come una stringa con carattere 
                        jolly. Se si utilizza questo parametro, vengono disabilitati 
                        i parametri Regex ed Exact. Se la clausola di corrispondenza 
                        non è una stringa, viene ignorato questo parametro.

        Exact	        Indica che la clausola di 
                        corrispondenza, se è una stringa, deve corrispondere con 
                        esattezza. Se si utilizza questo parametro, vengono disabilitati i 
                        parametri Wildcard e Regex. Se la clausola di corrispondenza non è 
                        una stringa, viene ignorato questo parametro.

        CaseSensitive	Modifica la clausola di corrispondenza, se è 
                        una stringa, in modo che rilevi la distinzione tra maiuscole 
                        e minuscole. Se la clausola di corrispondenza non è una 
                        stringa, viene ignorato questo parametro.

        File	        Ottiene l'input da un file (o da un elemento 
                        rappresentativo) anziché da un'istruzione. Se sono presenti più 
                        parametri -file, viene utilizzato solo l'ultimo. Ogni riga del file 
                        viene letta e passata al blocco di istruzioni switch.

    Sono consentiti utilizzi multipli di Regex, Wildcard o Exact, 
    tuttavia, solo l'ultimo parametro utilizzato regola il comportamento.

    La parola chiave Break indica che l'elaborazione non proseguirà e che 
    l'istruzione Switch verrà terminata. 

    La parola chiave Continue indica che l'elaborazione del token 
    corrente verrà terminata e che verrà valutato il token successivo 
    dell'elemento condizionale. Se non sono disponibili token, 
    l'istruzione Switch verrà terminata.

    Il blocco "{ expression }" può essere un blocco di codice che 
    verrà valutato al momento del confronto. L'oggetto corrente è 
    associato alla variabile automatica $_ ed è disponibile durante 
    la valutazione dell'espressione. Un confronto viene considerato una 
    corrispondenza se l'espressione restituisce "True". Questa 
    espressione viene valutata in un nuovo ambito.

    La parola chiave "Default" nell'istruzione switch indica che, se 
    non viene trovata alcun corrispondenza, verrà valutato il blocco 
    di codice che segue la parola chiave. Non verrà consentito il 
    flusso di programma da blocco a blocco poiché la parentesi graffa 
    di chiusura ( } ) nell'elenco composito è una parola chiave break 
    esplicita. 

    Se vengono trovate più corrispondenze, ognuna restituirà l'espressione 
    eseguita. Per impedire che ciò avvenga, è possibile utilizzare la 
    parola chiave Break o Continue per interrompere ulteriori confronti.


VEDERE ANCHE
    about_Break
    about_Continue
    about_If
    about_Script_Blocks




Argomenti della Guida