Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Deskripsi singkat
Menjelaskan pernyataan break, yang menyediakan cara untuk keluar dari blok kontrol saat ini.
Deskripsi panjang
Pernyataan 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
Ketika pernyataan break muncul dalam perulangan, seperti perulangan foreach, for, do, atau while, PowerShell segera keluar dari perulangan.
Pernyataan break 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 pernyataan break untuk keluar dari pernyataan for:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
Dalam contoh ini, pernyataan break keluar dari perulangan for ketika variabel $i 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 pernyataan break dalam perulangan di mana kondisi dalam harus terpenuhi. Pertimbangkan contoh pernyataan foreach berikut:
$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, pernyataan foreach melakukan iterasi array $varB. Pernyataan if mengevaluasi ke False dua kali pertama perulangan dijalankan dan variabel $i bertambah 1. Ketiga kalinya perulangan dijalankan, $i sama dengan 2, dan variabel $val sama dengan 30. Pada titik ini, pernyataan break berjalan, dan perulangan foreach keluar.
Menggunakan break berlabel dalam perulangan
Pernyataan break dapat menyertakan label. Jika Anda menggunakan kata kunci break 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 dari perulangan berlabel. Dalam perulangan yang disematkan, ini memiliki hasil yang berbeda dari kata kunci break ketika digunakan dengan sendirinya. Contoh ini memiliki pernyataan while dengan pernyataan for:
:myLabel while (<condition 1>) {
foreach ($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"
Jika variabel $b mengevaluasi ke True, eksekusi skrip dilanjutkan setelah perulangan yang diberi label "merah". Jika variabel $c dievaluasi ke True, eksekusi kontrol skrip akan dilanjutkan setelah perulangan yang diberi label "kuning".
Jika variabel $a mengevaluasi ke True, eksekusi dilanjutkan setelah perulangan terdalu. 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 kunci break digunakan untuk meninggalkan konstruksi switch. Misalnya, pernyataan switch berikut menggunakan pernyataan break 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, variabel $var 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 pernyataan switch berjalan.
Saat PowerShell mencapai pernyataan break pertama, pernyataan switch keluar. Jika empat pernyataan break dihapus dari contoh, keempat kondisi terpenuhi. Contoh ini menggunakan pernyataan break untuk menampilkan hasil saat kondisi yang paling spesifik terpenuhi.
Menggunakan break dalam trap pernyataan
Jika pernyataan akhir yang dijalankan dalam isi pernyataan trapbreak, 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.
After loop tidak pernah tercapai. Pengecualian dilemparkan kembali setelah trap dijalankan.
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 terlihat meningkatkan tumpukan panggilan untuk konstruksi yang mencakup. 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.