Acerca de la interrupción
DESCRIPCIÓN BREVE
Describe una instrucción que puede usar para salir inmediatamente de las instrucciones Foreach, For, While, Do o Switch.
DESCRIPCIÓN LARGA
Cuando aparece una instrucción Break en un bucle, como un bucle Foreach, For o While, la instrucción Break hace que PowerShell salga inmediatamente del bucle. En una construcción Switch, Break hace que PowerShell salga del bloque de código Switch.
Una instrucción Break puede incluir una etiqueta que le permite salir de bucles incrustados. Una etiqueta puede especificar cualquier palabra clave de bucle, como Foreach, For o While, en un script.
En el ejemplo siguiente se muestra cómo usar una instrucción Break para salir de una instrucción For:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
En este ejemplo, la instrucción Break sale del bucle For cuando la variable $i es igual a 1. Aunque la instrucción For se evalúa como True hasta que $i sea mayor que 10, PowerShell alcanza la instrucción break la primera vez que se ejecuta el bucle For.
Es más común usar la instrucción Break en un bucle donde se debe cumplir una condición interna. Considere el siguiente ejemplo de instrucción 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"
En este ejemplo, la instrucción Foreach recorre en iteración la matriz de $varB. Cada vez que se ejecuta el bloque de código, la variable $i se incrementa en 1. La instrucción If se evalúa como False las dos primeras veces que se ejecuta el bucle. La tercera vez que se ejecuta el bucle, $i es igual a 3 y la variable $val es igual a 30. En este momento, se ejecuta la instrucción Break y se cierra el bucle Foreach.
Se interrumpen las demás instrucciones de bucle de la misma manera que se interrumpen en el bucle Foreach. En el ejemplo siguiente, la instrucción Break sale de una instrucción While cuando se captura una excepción DivideByZeroException mediante la instrucción Trap.
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
Una instrucción Break puede incluir una etiqueta. Si usa la palabra clave Break con una etiqueta, PowerShell sale del bucle etiquetado en lugar de salir del bucle actual. La sintaxis de una etiqueta es la siguiente (en este ejemplo se muestra una etiqueta en un bucle While):
:myLabel while (<condition>
) { <statement list>
}
La etiqueta es un signo de dos puntos seguido de un nombre que asigne. La etiqueta debe ser el primer token de una instrucción y debe seguir la palabra clave de bucle, como While.
En PowerShell, solo pueden tener una etiqueta palabras clave de bucle, como Foreach, For y While.
La interrupción mueve la ejecución fuera del bucle etiquetado. En los bucles incrustados, esto tiene un resultado diferente al de la palabra clave Break cuando se usa por sí mismo. Este ejemplo esquemático tiene una instrucción While con una instrucción 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
Si la condición 2 se evalúa como True, la ejecución del script pasa a la instrucción después del bucle etiquetado. En el ejemplo, la ejecución se inicia de nuevo con la instrucción "$a = $c".
Puede anidar muchos bucles etiquetados, como se muestra en el siguiente ejemplo de esquema.
: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"
Si la variable $b se evalúa como True, la ejecución del script se reanuda después del bucle con la etiqueta "rojo". Si la variable $c se evalúa como True, la ejecución del control de script se reanuda después del bucle denominado "amarillo".
Si la variable $a se evalúa como True, la ejecución se reanuda después del bucle más interno. No se necesita ninguna etiqueta.
PowerShell no limita la distancia con la que las etiquetas pueden reanudar la ejecución. La etiqueta puede incluso pasar el control a través de los límites del script y de la llamada de función.
La palabra clave Break se usa para dejar la construcción Switch. Por ejemplo, la siguiente instrucción Switch usa instrucciones Break para probar la condición más 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
}
}
En este ejemplo, la variable $var se crea e inicializa en un valor de cadena de "word2". La instrucción Switch usa la clase Regex para que coincida primero con el valor de la variable con el término "word2". (La clase Regex es una expresión regular clase de Microsoft .NET Framework). Dado que el valor de la variable y la primera prueba de la instrucción Switch coinciden, se ejecuta el primer bloque de código de la instrucción Switch.
Cuando PowerShell alcanza la primera instrucción Break, se cierra la instrucción Switch. Si se quitan las cuatro instrucciones Break del ejemplo, se cumplen las cuatro condiciones. En este ejemplo se usa la instrucción break para mostrar los resultados cuando se cumple la condición más específica.