Partilhar via


Sobre a Switch

BREVE DESCRIÇÃO

Explica como utilizar um interruptor para manusear várias declarações se forem feitas.

LONGA DESCRIÇÃO

Para verificar uma condição num script ou função, utilize uma If declaração. A If declaração pode verificar muitos tipos de condições, incluindo o valor das variáveis e as propriedades dos objetos.

Para verificar várias condições, utilize uma Switch declaração. A Switch afirmação equivale a uma série de declarações de If, mas é mais simples. A Switch declaração enumera cada condição e uma ação opcional. Se uma condição for obtida, a ação é executada.

A Switch declaração também usa a $switch variável automática. Para mais informações, consulte about_Automatic_Variables.

Uma declaração básica Switch tem o seguinte formato:

Switch (<test-value>)
{
    <condition> {<action>}
    <condition> {<action>}
}

Por exemplo, a seguinte Switch declaração compara o valor do teste, 3, a cada uma das condições. Quando o valor do teste corresponde à condição, a ação é executada.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
It is three.

Neste exemplo simples, o valor é comparado a cada condição da lista, mesmo que haja uma correspondência para o valor 3. A seguinte Switch declaração tem duas condições para um valor de 3. Demonstra que, por defeito, todas as condições são testadas.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.
Three again.

Para direcionar Switch o parando de comparar após uma partida, use a Break declaração. A Break declaração termina a Switch declaração.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."; Break}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.

Se o valor de teste for uma coleção, tal como uma matriz, cada item da coleção é avaliado na ordem em que aparece. Os exemplos a seguir avaliam 4 e depois 2.

switch (4, 2)
{
    1 {"It is one." }
    2 {"It is two." }
    3 {"It is three." }
    4 {"It is four." }
    3 {"Three again."}
}
It is four.
It is two.

Quaisquer Break declarações aplicam-se à coleção, e não a cada valor, como mostra o exemplo seguinte. A Switch declaração é encerrada pela declaração no estado de valor Break 4.

switch (4, 2)
{
    1 {"It is one."; Break}
    2 {"It is two." ; Break }
    3 {"It is three." ; Break }
    4 {"It is four." ; Break }
    3 {"Three again."}
}
It is four.

Syntax

A sintaxe de declaração completa Switch é a seguinte:

switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

ou

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

Se não forem utilizados parâmetros, Switch executa uma correspondência exata insensível ao caso pelo valor. Se o valor for uma coleção, cada elemento é avaliado na ordem em que aparece.

A Switch declaração deve incluir pelo menos uma declaração de condição.

A Default cláusula é desencadeada quando o valor não corresponde a nenhuma das condições. É equivalente a uma Else cláusula num If comunicado. Apenas uma Default cláusula é permitida em cada Switch declaração.

Switchtem os seguintes parâmetros:

Parâmetro Descrição
Wildcard Indica que a condição é uma corda wildcard.
Se a cláusula de jogo não é uma corda, o parâmetro é
é ignorado.
Exato Indica que a cláusula de jogo, se for uma corda, deve
combinar exatamente. Se a cláusula de jogo não é uma corda, este parâmetro
é ignorado.
CasoSensitivo Executa uma combinação sensível a casos. Se a cláusula de jogo não for
uma corda, este parâmetro é ignorado.
Ficheiro Tira a entrada de um ficheiro em vez de uma declaração de valor. Se
vários parâmetros de arquivo estão incluídos, apenas o último é
usado. Cada linha do ficheiro é lida e avaliada pela
Switchdeclaração.
Regex Executa a correspondência regular da expressão do valor com o
condição. Caso a opção
cláusula de correspondência não é uma corda, este parâmetro é ignorado.

Nota

Ao especificar valores contraditórios, como Regex e Wildcard, o último parâmetro especificado tem precedência, e todos os parâmetros contraditórios são ignorados. São também permitidas múltiplas instâncias de parâmetros. No entanto, apenas o último parâmetro utilizado é eficaz.

Neste exemplo, não há caso de correspondência, pelo que não existe saída.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
}

Ao adicionar a Default cláusula, pode executar uma ação quando nenhuma outra condição for bem sucedida.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
    Default {
        "No matches"
    }
}
No matches

Para que a palavra "catorze" corresponda a uma caixa deve utilizar o -Wildcard parâmetro ou -Regex o parâmetro.

   PS> switch -Wildcard ("fourteen")
       {
           1 {"It is one."; Break}
           2 {"It is two."; Break}
           3 {"It is three."; Break}
           4 {"It is four."; Break}
           "fo*" {"That's too many."}
       }
That's too many.

O exemplo a seguir utiliza o -Regex parâmetro.

$target = 'user@contoso.com'
switch -Regex ($target)
{
    'ftp\://.*' { "$_ is an ftp address"; Break }
    '\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
    'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address

Uma Switch condição de declaração pode ser:

  • Uma expressão cujo valor é comparado com o valor de entrada
  • Um bloco de guião que deve voltar $true se uma condição for cumprida. O bloco de scripts recebe o objeto atual para comparar na $_ variável automática e é avaliado no seu próprio âmbito.

A ação para cada condição é independente das ações noutras condições.

O exemplo a seguir demonstra a utilização de blocos de script como condições de Switch declaração.

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This executes as well"
    }
}
Found a string
This executes as well

Se o valor corresponder a várias condições, a ação para cada condição é executada. Para alterar este comportamento, use as Break Continue palavras-chave ou as palavras-chave.

A Break palavra-chave para o processamento e sai da Switch declaração.

A Continue palavra-chave para de processar o valor atual, mas continua a processar quaisquer valores subsequentes.

O exemplo a seguir processa uma série de números e ecrãs se forem estranhos ou mesmo. Os números negativos são ignorados com a Continue palavra-chave. Se um não-número for encontrado, a execução termina com a Break palavra-chave.

switch (1,4,-1,3,"Hello",2,1)
{
    {$_ -lt 0} { Continue }
    {$_ -isnot [Int32]} { Break }
    {$_ % 2} {
        "$_ is Odd"
    }
    {-not ($_ % 2)} {
        "$_ is Even"
    }
}
1 is Odd
4 is Even
3 is Odd

VER TAMBÉM

about_Break

about_Continue

about_If

about_Script_Blocks