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
, do
atau 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
, , for
atau 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
switch
Dalam 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 switch
kelas 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk