Sobre o Break
DESCRIÇÃO BREVE
Descreve uma instrução que você pode usar para sair imediatamente das instruções Foreach, For, While, Do ou Switch.
DESCRIÇÃO LONGA
Quando uma instrução Break aparece em um loop, como um loop Foreach, For ou While, a instrução Break faz com que o PowerShell saia imediatamente do loop. Em um constructo Switch, Break faz com que o PowerShell saia do bloco de código Switch.
Uma instrução Break pode incluir um rótulo que permite sair de loops inseridos. Um rótulo pode especificar qualquer palavra-chave de loop, como Foreach, For ou While, em um script.
O exemplo a seguir mostra como usar uma instrução Break para sair de uma instrução For:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
Neste exemplo, a instrução Break sai do loop For quando a variável $i é igual a 1. Embora a instrução For seja avaliada como True até que $i seja maior que 10, o PowerShell atinge a instrução break na primeira vez que o loop For é executado.
É mais comum usar a instrução Break em um loop em que uma condição interna deve ser atendida. Considere o seguinte exemplo de instrução Foreach:
$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
$i++
if ($val -eq 30) {
break
}
}
Write-Host "30 was found in array position $i"
Neste exemplo, a instrução Foreach itera a matriz $varB. Cada vez que o bloco de código é executado, a variável $i é incrementada em 1. A instrução If é avaliada como False nas duas primeiras vezes em que o loop é executado. A terceira vez que o loop é executado, $i é igual a 3 e a variável $val é igual a 30. Neste ponto, a instrução Break é executada e o loop Foreach é encerrado.
Você sai das outras instruções de loop da mesma maneira que sai do loop Foreach. No exemplo a seguir, a instrução Break sai de uma instrução While quando uma exceção DivideByZeroException é presa usando a instrução Trap.
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
Uma instrução Break pode incluir um rótulo. Se você usar a palavra-chave De interrupção com um rótulo, o PowerShell sairá do loop rotulado em vez de sair do loop atual. A sintaxe de um rótulo é a seguinte (este exemplo mostra um rótulo em um loop While):
:myLabel while (<condition>
) { <statement list>
}
O rótulo é dois-pontos seguido por um nome que você atribui. O rótulo deve ser o primeiro token em uma instrução e deve ser seguido pelo palavra-chave de looping, como While.
No PowerShell, somente palavras-chave de loop, como Foreach, For e While, podem ter um rótulo.
A quebra move a execução para fora do loop rotulado. Em loops inseridos, isso tem um resultado diferente do palavra-chave de Interrupção tem quando é usado por si só. Este exemplo de esquema tem uma instrução While com uma instrução For:
:myLabel while (<condition 1>) {
for ($item in $items) {
if (<condition 2>) {
break myLabel
}
$item = $x # A statement inside the For-loop
}
}
$a = $c # A statement after the labeled While-loop
Se a condição 2 for avaliada como True, a execução do script pulará para baixo para a instrução após o loop rotulado. No exemplo, a execução começa novamente com a instrução "$a = $c".
Você pode aninhar muitos loops rotulados, conforme mostrado no exemplo de esquema a seguir.
:red while (<condition1>) {
:yellow while (<condition2>) {
while (<condition3>) {
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
Write-Host "After innermost loop"
}
Write-Host "After yellow loop"
}
Write-Host "After red loop"
Se a variável $b for avaliada como True, a execução do script será retomada após o loop rotulado como "vermelho". Se a variável $c for avaliada como True, a execução do controle de script será retomada após o loop rotulado como "amarelo".
Se a variável $a for avaliada como True, a execução será retomada após o loop mais interno. Nenhum rótulo é necessário.
O PowerShell não limita até que ponto os rótulos podem retomar a execução. O rótulo pode até mesmo passar o controle entre os limites de chamada de script e função.
A palavra-chave De interrupção é usada para deixar o constructo Switch. Por exemplo, a seguinte instrução Switch usa instruções Break para testar a condição mais específica:
$var = "word2"
switch -regex ($var) {
"word2" {
Write-Host "Exact" $_
break
}
"word.*" {
Write-Host "Match on the prefix" $_
break
}
"w.*" {
Write-Host "Match on at least the first letter" $_
break
}
default {
Write-Host "No match" $_
break
}
}
Neste exemplo, a variável $var é criada e inicializada para um valor de cadeia de caracteres de "word2". A instrução Switch usa a classe Regex para corresponder o valor da variável primeiro com o termo "word2". (A classe Regex é uma expressão regular da classe Microsoft .NET Framework.) Como o valor da variável e o primeiro teste na instrução Switch correspondem, o primeiro bloco de código na instrução Switch é executado.
Quando o PowerShell atinge a primeira instrução Break, a instrução Switch é encerrada. Se as quatro instruções Break forem removidas do exemplo, todas as quatro condições serão atendidas. Este exemplo usa a instrução break para exibir resultados quando a condição mais específica é atendida.