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