Compartilhar via


Sobre interrupção

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 é exibida em um loop, como um loop foreach, for ou while, a instrução break faz com que o PowerShell saia imediatamente do loop. Em uma construção de switch, Break faz com que o PowerShell saia do bloco de código de alternância.

Uma instrução break pode incluir um rótulo que permite que você saia de loops inseridos. Um rótulo pode especificar qualquer palavra-chave 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 avaliada como true até que $i seja maior que 10, o PowerShell alcança a instrução break na primeira vez em 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 de $varB. Cada vez que o bloco de código é executado, a variável $i é incrementada em 1. A instrução If é avaliada como false as duas primeiras vezes que o loop é executado. Na terceira vez em 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 looping 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 é interceptada 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 break 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 é um ponto-e-vírgula seguido de um nome que você atribui. O rótulo deve ser o primeiro token em uma instrução e deve ser seguido pela palavra-chave de loop, como While.

No PowerShell, somente palavras-chave de loop, como foreach, for e While podem ter um rótulo.

Break move a execução para fora do loop rotulado. Em loops inseridos, isso tem um resultado diferente do que a palavra-chave break tem quando ele é usado por si só. Este exemplo esquemático 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 será ignorada até 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 esquemático 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 de $b for avaliada como true, a execução do script será retomada após o loop rotulado "Red". Se a variável de $c for avaliada como true, a execução do controle de script será retomada após o loop rotulado "amarelo".

Se a variável de $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 a distância com que os rótulos podem retomar a execução. O rótulo pode até passar o controle entre os limites de chamada de script e de função.

A palavra-chave break é usada para deixar a construção do comutador. Por exemplo, a instrução switch a seguir 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 com 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 Microsoft .NET classe 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.

CONSULTE TAMBÉM

about_Comparison_Operators

about_Continue

about_For

about_Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While