Break_Hakkında

Kısa açıklama

Geçerli denetim bloğundan çıkmak için bir yol sağlayan break deyimini açıklar.

Uzun açıklama

break deyimi geçerli denetim bloğundan çıkmak için bir yol sağlar. Yürütme, denetim bloğundan sonraki deyimde devam eder. Açıklama etiketleri destekler. Etiket, betikteki bir deyime atadığınız addır.

döngülerde break kullanma

break, foreach, forveya do döngüsü gibi bir döngüde while deyimi görüntülendiğinde PowerShell döngüden hemen çıkar.

break deyimi, eklenmiş döngülerden çıkmanıza olanak tanıyan bir etiket içerebilir. Etiket, betikte foreach, forveya whilegibi herhangi bir döngü anahtar sözcüğü belirtebilir.

Aşağıdaki örnekte, break deyiminden çıkmak için for deyiminin nasıl kullanılacağı gösterilmektedir:

for($i=1; $i -le 10; $i++) {
   Write-Host $i
   break
}

Bu örnekte, break değişkeni 1'e eşit olduğunda for deyimi $i döngüsünden çıkar. deyimi, 10'dan büyük olana kadar True olarak değerlendirilse de, döngüsü ilk kez çalıştırıldığında PowerShell kesme deyimine ulaşır.

bir iç koşulun karşılanması gereken bir döngüde break deyimini kullanmak daha yaygındır. Aşağıdaki foreach deyimi örneğini göz önünde bulundurun:

$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
  if ($val -eq 30) {
    break
  }
  $i++
}
Write-Host "30 was found in array index $i"

Bu örnekte, foreach deyimi $varB dizisini yineler. if deyimi, döngünün ilk iki kez çalıştırıldığında False olarak değerlendirilir ve $i değişkeni 1 artırılır. Döngü üçüncü kez çalıştırıldığında, $i 2'ye ve $val değişkeni 30'a eşittir. Bu noktada, break deyimi çalıştırılır ve foreach döngüsü çıkar.

Döngüde etiketli break kullanma

break deyimi etiket içerebilir. break anahtar sözcüğünü bir etiketle kullanırsanız, PowerShell geçerli döngüden çıkmak yerine etiketlenmiş döngüden çıkar. Etiket, iki nokta üst üste ve ardından atadığınız bir addır. Etiketin bir deyimdeki ilk belirteç olması ve ardından whilegibi döngü anahtar sözcüğünün izlenmesi gerekir.

break yürütmeyi etiketlenmiş döngünün dışına taşır. Katıştırılmış döngülerde bu, tek başına kullanıldığında break anahtar sözcüğünden farklı bir sonuca sahiptir. Bu örnekte while deyimine sahip bir for deyimi vardır:

: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

Koşul 2 Trueolarak değerlendirilirse, betiğin yürütülmesi etiketli döngüden sonra deyimine atlar. Örnekte yürütme işlemi $a = $cdeyimiyle yeniden başlar.

Aşağıdaki örnekte gösterildiği gibi birçok etiketli döngünün iç içe yerleştirebilirsiniz.

: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"

$b değişkeni True olarak değerlendirilirse, betiğin yürütülmesi "kırmızı" etiketli döngüden sonra devam eder. $c değişkeni True olarak değerlendirilirse, betik denetiminin yürütülmesi "sarı" etiketli döngüden sonra devam eder.

$a değişkeni True olarak değerlendirilirse yürütme en içteki döngüden sonra devam eder. Etiket gerekmez.

PowerShell, etiketlerin yürütmeyi ne kadar sürdürebileceğini sınırlamaz. Etiket, denetimi betik ve işlev çağrısı sınırları arasında bile geçirebilir.

break deyiminde switch kullanma

switchyapısında break PowerShell'in switch kod bloğundan çıkmasına neden olur.

break anahtar sözcüğü, switch yapısını bırakmak için kullanılır. Örneğin, aşağıdaki switch deyimi en belirli koşulu test etmek için break deyimlerini kullanır:

$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
    }
}

Bu örnekte $var değişkeni oluşturulur ve word2dize değerine başlatılır. switch deyimi, değişken değerini ilk olarak terimiyle eşleştirmek için word2 sınıfını kullanır. Değişken değeri ve switch deyimindeki ilk test eşleştiğinden, switch deyimindeki ilk kod bloğu çalışır.

PowerShell ilk break deyimine ulaştığında, switch deyiminden çıkar. Dört break deyimi örnekten kaldırılırsa, dört koşul da karşılar. Bu örnekte, en belirli koşul karşılandığında sonuçları görüntülemek için break deyimi kullanılır.

break deyiminde trap kullanma

trap deyiminin gövdesinde yürütülen son deyim breakise, hata nesnesi gizlenip özel durum yeniden oluşturulur.

Aşağıdaki örnek, deyimi kullanılarak kapana kısılmış bir trap özel durumu oluşturur.

function test {
  trap [DivideByZeroException] {
    Write-Host 'divide by zero trapped'
    break
  }

  $i = 3
  'Before loop'
  while ($true) {
     "1 / $i = " + (1 / $i--)
  }
  'After loop'
}
test

Yürütmenin özel durumda durduğuna dikkat edin. After loop hiçbir zaman ulaşılamazdı. özel durum, trap yürütülür sonra yeniden oluşturulur.

Before loop
1 / 3 = 0.333333333333333
1 / 2 = 0.5
1 / 1 = 1
divide by zero trapped
ParentContainsErrorRecordException:
Line |
  10 |       "1 / $i = " + (1 / $i--)
     |       ~~~~~~~~~~~~~~~~~~~~~~~~
     | Attempted to divide by zero.

döngü, breakveya switch dışında trap kullanmayın

doğrudan destekleyen bir yapı dışında kullanıldığında (döngüler, , ), PowerShell bir kapsayan yapı aramak için çağrı yığınına bakar. Kapsayan bir yapı bulamazsa, geçerli çalışma alanı sessizce sonlandırılır.

Bu, onu destekleyen bir kapalı yapı dışında yanlışlıkla bir kullanan işlevlerin ve betiklerinçağıranlarını istemeden sonlandırabileceği anlamına gelir.

break betik bloğu gibi bir işlem hattı breakiçinde ForEach-Object kullanmak işlem hattından çıkmakla olmaz, aynı zamanda çalışma alanının tamamını da sonlandırabilir.

Ayrıca bakınız