TÓPICO
about_Switch
DESCRIÇÃO RESUMIDA
Explica como usar Switch para manipular várias instruções If.
DESCRIÇÃO LONGA
Você utiliza uma instrução If para tomar uma decisão em um script
ou programa. Essencialmente, ela diz "Se essa condição existir,
execute esta ação. Caso contrário, execute aquela". Você pode
executar essa operação quantas vezes desejar, mas se tiver uma
lista muito longa de condições, a instrução If se torna difícil
de controlar. Você pode combinar uma lista longa de condições em
uma instrução Switch. Assim como em todas as instruções ramificadas, é
necessário colocar os blocos de script entre chaves ({}).
Uma instrução Switch é, na verdade, uma série de instruções If.
Ela combina a expressão com cada uma das condições, caso a caso.
Se uma ocorrência for encontrada, a ação associada à condição é
executada. A instrução Switch básica tem a seguinte forma:
PS> $a = 3
PS> switch ($a) {
1 {"É o um."}
2 {"É o dois."}
3 {"É o três."}
4 {"É o quatro."}
}
É o três.
Esse exemplo simples pega um valor e o compara com cada condição
da lista. A ação repete uma cadeia de caracteres da
correspondência. Mas você pode ter problemas se verificar todas
as condições. Por exemplo:
PS> $day = "day5"
PS> switch ($day){
day1 {"Segunda-feira"; break}
day2 {"Terça-feira"; break}
day3 {"Quarta-feira"; break}
day4 {"Quinta-feira"; break}
day5 {"Sexta-feira"; break}
day6 {"Sábado"; break}
day7 {"Domingo"; break}
day5 {"Dias demais"; break}
}
Sexta-feira
Há duas condições day5 na lista. Mas o break no final de cada
condição diz a Switch para parar de procurar e executar a ação
encontrada. Se as instruções break não estivessem ali, as duas
ações day5 seriam executadas.
Se o valor de alternância for uma matriz, então cada elemento na
matriz será avaliado na ordem, começando pelo elemento 0 (zero).
Deve estar presente pelo menos um elemento que atenda a pelo menos uma
condição; caso contrário, o resultado será um erro. Se houver mais de
uma cláusula padrão, haverá um erro.
A sintaxe completa de Switch é:
switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline )
ou
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
seguido por
{
"cadeia de caracteres"|number|variable|{ expression } {
statementlist } default { statementlist }
}
Por padrão, se nenhum parâmetro for usado, Switch se comportará
como se uma ocorrência exata sem diferenciar maiúsculas de minúsculas
estivesse em vigor. Se "pipeline" resultar em uma matriz, cada
elemento da matriz será avaliado na ordem de deslocamento crescente
(começando pelo 0 [zero]).
Pelo menos um elemento condicional deve estar presente no bloco
de código de Switch, e apenas uma cláusula padrão pode estar
presente. Se houver mais de uma cláusula padrão, será lançada uma
ParseException.
Switch tem os seguintes parâmetros:
Regex Indica que a cláusula correspondente,
se for uma cadeia de caracteres, será tratada como uma cadeia de
caracteres regex. O uso desse parâmetro desabilita Wildcard e Exact.
Se a cláusula correspondente não for uma cadeia de caracteres, esse
parâmetro será ignorado.
Wildcard Indica que a cláusula correspondente, se for uma
cadeia de caracteres, será tratada como uma cadeia de
caracteres curinga. O uso desse parâmetro desabilita Regex e
Exact. Se a cláusula correspondente não for uma cadeia de
caracteres, esse parâmetro será ignorado.
Exact Indica que a cláusula correspondente,
se for uma cadeia de caracteres, deverá ser uma
correspondência exata. O uso desse parâmetro desabilita
Wildcard e Regex. Se a cláusula correspondente não for uma
cadeia de caracteres, esse parâmetro será ignorado.
CaseSensitive Modifica a cláusula correspondente, caso seja
uma cadeia de caracteres, para que diferencie maiúsculas de
minúsculas. Se a cláusula correspondente não for uma cadeia
de caracteres, esse parâmetro será ignorado.
File Usa a entrada de um arquivo (ou representante),
em vez de uma instrução. Se vários parâmetros
File forem usados, o último será o escolhido. Cada linha do
arquivo é lida e passada para o bloco Switch.
São permitidos vários usos de Regex, Wildcard ou Exact. No
entanto, somente o último parâmetro usado rege o comportamento.
A palavra-chave Break indica que não haverá mais processamento e que a
instrução Switch será fechada.
A palavra-chave Continue indica que não haverá mais processamento
no token atual e que o próximo token da condicional será
avaliado. Se não houver mais tokens disponíveis, a instrução
Switch será fechada.
O bloco "{ expression }" pode ser um bloco de código que será
avaliado no momento da comparação. O objeto atual está vinculado
à variável automática $_ e fica disponível durante a avaliação da
expressão. Uma comparação será considerada uma ocorrência caso a
expressão seja avaliada como "True". Essa expressão é avaliada em
um novo escopo.
A palavra-chave "Default" que aparece na instrução Switch indica
que, se nenhuma correspondência for encontrada, o bloco de código
depois dela será avaliado. Não será permitido que o fluxo do
programa siga bloco por bloco, pois a chave de fechamento na
lista composta é um break explícito.
Caso sejam encontradas várias correspondências, cada uma delas
resultará na execução da expressão. Para evitar isso, as
palavras-chave Break ou Continue podem ser usadas para
interromper futuras comparações.
CONSULTE TAMBÉM
about_Break
about_Continue
about_If
about_Script_Blocks