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