about_Break

Deskripsi singkat

Menjelaskan break pernyataan, yang menyediakan cara untuk keluar dari blok kontrol saat ini.

Deskripsi panjang

Pernyataan ini break menyediakan cara untuk keluar dari blok kontrol saat ini. Eksekusi berlanjut pada pernyataan berikutnya setelah blok kontrol. Pernyataan ini mendukung label. Label adalah nama yang Anda tetapkan ke pernyataan dalam skrip.

Menggunakan break dalam perulangan

break Ketika pernyataan muncul dalam perulangan, seperti foreach, , for, doatau while perulangan, PowerShell segera keluar dari perulangan.

break Pernyataan dapat menyertakan label yang memungkinkan Anda keluar dari perulangan yang disematkan. Label dapat menentukan kata kunci perulangan apa pun, seperti foreach, , foratau while, dalam skrip.

Contoh berikut menunjukkan cara menggunakan break pernyataan untuk keluar dari for pernyataan:

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

Dalam contoh ini, break pernyataan keluar dari perulangan for ketika $i variabel sama dengan 1. Meskipun for pernyataan mengevaluasi ke True hingga $i lebih besar dari 10, PowerShell mencapai pernyataan jeda saat pertama kali for perulangan dijalankan.

Lebih umum menggunakan break pernyataan dalam perulangan di mana kondisi dalam harus dipenuhi. Pertimbangkan contoh pernyataan berikut foreach :

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

Dalam contoh ini, foreach pernyataan melakukan iterasi $varB array. Pernyataan if mengevaluasi ke False dua kali pertama perulangan dijalankan dan variabel $i bertambah 1. Ketiga kalinya perulangan dijalankan, $i sama dengan 2, dan $val variabel sama dengan 30. Pada titik ini, break pernyataan berjalan, dan perulangan foreach keluar.

Menggunakan label break dalam perulangan

Pernyataan break dapat menyertakan label. Jika Anda menggunakan break kata kunci dengan label, PowerShell keluar dari perulangan berlabel alih-alih keluar dari perulangan saat ini. Label adalah titik dua diikuti dengan nama yang Anda tetapkan. Label harus menjadi token pertama dalam pernyataan, dan harus diikuti dengan kata kunci perulangan, seperti while.

break memindahkan eksekusi keluar dari perulangan berlabel. Dalam perulangan yang disematkan, ini memiliki hasil yang berbeda dari break kata kunci ketika digunakan dengan sendirinya. Contoh ini memiliki while pernyataan dengan for pernyataan:

: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

Jika kondisi 2 mengevaluasi ke True, eksekusi skrip melompat ke pernyataan setelah perulangan berlabel. Dalam contoh, eksekusi dimulai lagi dengan pernyataan $a = $c.

Anda dapat menumpuk banyak perulangan berlabel, seperti yang ditunjukkan dalam contoh berikut.

: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 Jika variabel mengevaluasi ke True, eksekusi skrip dilanjutkan setelah perulangan yang diberi label "merah". $c Jika variabel mengevaluasi ke True, eksekusi kontrol skrip akan dilanjutkan setelah perulangan yang diberi label "kuning".

$a Jika variabel mengevaluasi ke True, eksekusi akan dilanjutkan setelah perulangan terdarah. Tidak diperlukan label.

PowerShell tidak membatasi seberapa jauh label dapat melanjutkan eksekusi. Label bahkan dapat meneruskan kontrol di seluruh batas panggilan skrip dan fungsi.

Menggunakan break dalam switch pernyataan

switchDalam konstruksi, break menyebabkan PowerShell keluar dari switch blok kode.

Kata break kunci digunakan untuk meninggalkan switch konstruksi. Misalnya, pernyataan berikut switch menggunakan break pernyataan untuk menguji kondisi yang paling spesifik:

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

Dalam contoh ini, $var variabel dibuat dan diinisialisasi ke nilai string .word2 Pernyataan menggunakan switchkelas Regex untuk mencocokkan nilai variabel terlebih dahulu dengan istilah word2. Karena nilai variabel dan pengujian pertama dalam pernyataan switch cocok, blok kode pertama dalam switch pernyataan berjalan.

Ketika PowerShell mencapai pernyataan pertama break , switch pernyataan keluar. Jika empat break pernyataan dihapus dari contoh, keempat kondisi terpenuhi. Contoh ini menggunakan break pernyataan untuk menampilkan hasil ketika kondisi yang paling spesifik terpenuhi.

Menggunakan break dalam trap pernyataan

Jika pernyataan akhir yang dijalankan dalam isi trap pernyataan adalah break, objek kesalahan ditekan dan pengecualian dilemparkan kembali.

Contoh berikut membuat pengecualian DivideByZeroException yang terperangkap menggunakan trap pernyataan .

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

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

Perhatikan bahwa eksekusi berhenti pada pengecualian. Tidak After loop pernah tercapai. Pengecualian dilemparkan kembali setelah trap eksekusi.

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.

Jangan gunakan break di luar perulangan, switch, atau trap

Ketika break digunakan di luar konstruksi yang secara langsung mendukungnya (perulangan, switch, trap), PowerShell mencari tumpukan panggilan untuk konstruksi yang tertutup. Jika tidak dapat menemukan konstruksi yang tertutup, runspace saat ini dihentikan dengan diam-diam.

Ini berarti bahwa fungsi dan skrip yang secara tidak sengaja menggunakan break di luar konstruksi yang mencakup yang mendukungnya secara tidak sengaja dapat menghentikan penelepon mereka.

Menggunakan break di dalam alur break, seperti ForEach-Object blok skrip, tidak hanya keluar dari alur, itu berpotensi mengakhiri seluruh runspace.

Lihat juga