Over break
KORTE BESCHRIJVING
Beschrijft een instructie die u kunt gebruiken om de instructies Foreach, For, While, Do of Switch onmiddellijk af te sluiten.
LANGE BESCHRIJVING
Wanneer een break-instructie wordt weergegeven in een lus, zoals een Foreach-, For- of While-lus, zorgt de instructie Break ervoor dat PowerShell de lus onmiddellijk verlaat. In een Switch-constructie zorgt Break ervoor dat PowerShell het codeblok Switch verlaat.
Een break-instructie kan een label bevatten waarmee u ingesloten lussen kunt afsluiten. Een label kan elk luszoekwoord, zoals Foreach, For of While, in een script opgeven.
In het volgende voorbeeld ziet u hoe u een instructie Break gebruikt om een For-instructie af te sluiten:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
In dit voorbeeld sluit de instructie Break de lus For af wanneer de variabele $i gelijk is aan 1. Hoewel de for-instructie resulteert in Waar totdat $i groter is dan 10, bereikt PowerShell de onderbrekingsinstructie wanneer de for-lus voor de eerste keer wordt uitgevoerd.
Het is gebruikelijker om de instructie Break te gebruiken in een lus waarbij aan een binnenste voorwaarde moet worden voldaan. Bekijk het volgende voorbeeld van de Foreach-instructie:
$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"
In dit voorbeeld wordt met de Foreach-instructie de $varB matrix herhaald. Telkens wanneer het codeblok wordt uitgevoerd, wordt de variabele $i verhoogd met 1. De if-instructie resulteert in Onwaar de eerste twee keer dat de lus wordt uitgevoerd. De derde keer dat de lus wordt uitgevoerd, is $i gelijk aan 3 en is de variabele $val gelijk aan 30. Op dit moment wordt de instructie Break uitgevoerd en wordt de Foreach-lus afgesloten.
U breekt uit de andere lusinstructies op dezelfde manier als u uit de Foreach-lus breekt. In het volgende voorbeeld sluit de instructie Break een While-instructie af wanneer een DivideByZeroException-uitzondering is vastgelopen met behulp van de instructie Trap.
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
Een break-instructie kan een label bevatten. Als u het trefwoord Break met een label gebruikt, sluit PowerShell de gelabelde lus af in plaats van de huidige lus af te sluiten. De syntaxis voor een label is als volgt (in dit voorbeeld wordt een label in een While-lus weergegeven):
:myLabel while (<condition>
) { <statement list>
}
Het label is een dubbele punt gevolgd door een naam die u toewijst. Het label moet het eerste token in een instructie zijn en het moet worden gevolgd door het trefwoord lus, zoals While.
In PowerShell kunnen alleen lustrefwoorden, zoals Foreach, For en While, een label hebben.
Met onderbreken wordt de uitvoering uit de gelabelde lus verplaatst. In ingesloten lussen heeft dit een ander resultaat dan het trefwoord Break wanneer het zelf wordt gebruikt. Dit schematische voorbeeld heeft een While-instructie met de instructie 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
Als voorwaarde 2 waar oplevert, wordt de uitvoering van het script overgeslagen naar de instructie na de gelabelde lus. In het voorbeeld begint de uitvoering opnieuw met de instructie '$a = $c'.
U kunt veel gelabelde lussen nesten, zoals wordt weergegeven in het volgende schematische voorbeeld.
: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"
Als de variabele $b waar oplevert, wordt de uitvoering van het script hervat na de lus met het label 'rood'. Als de variabele $c resulteert in Waar, wordt de uitvoering van het scriptbeheer hervat na de lus met het label 'geel'.
Als de variabele $a waar oplevert, wordt de uitvoering hervat na de binnenste lus. Er is geen label nodig.
PowerShell beperkt niet hoe ver labels de uitvoering kunnen hervatten. Het label kan zelfs controle doorgeven over de grenzen van script- en functie-aanroepen.
Het trefwoord Break wordt gebruikt om de switch-constructie te verlaten. De volgende Switch-instructie maakt bijvoorbeeld gebruik van break-instructies om te testen op de meest specifieke voorwaarde:
$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
}
}
In dit voorbeeld wordt de variabele $var gemaakt en geïnitialiseerd met een tekenreekswaarde van 'word2'. De instructie Switch gebruikt de klasse Regex om de waarde van de variabele eerst te koppelen aan de term 'word2'. (De klasse Regex is een reguliere expressie van Microsoft .NET Framework-klasse.) Omdat de waarde van de variabele en de eerste test in de Switch-instructie overeenkomen, wordt het eerste codeblok in de Switch-instructie uitgevoerd.
Wanneer PowerShell de eerste break-instructie bereikt, wordt de instructie Switch afgesloten. Als de vier onderbrekingsinstructies uit het voorbeeld worden verwijderd, wordt aan alle vier voorwaarden voldaan. In dit voorbeeld wordt de instructie Break gebruikt om resultaten weer te geven wanneer aan de meest specifieke voorwaarde wordt voldaan.