Program kadang perlu menghentikan perulangan lebih awal atau melewati sebagian putarannya. Topik ini membahas pernyataan lompat (jump statement) break dan continue, perilaku keduanya pada perulangan bersarang, serta desain alur yang menjaga kode tetap terbaca. Setiap contoh dijalankan langsung, sehingga efek kedua pernyataan tersebut terlihat pada keluarannya.
break dan continue sebagai pernyataan lompat#
break dan continue termasuk pernyataan lompat, yaitu pernyataan yang memindahkan alur eksekusi secara langsung dan bukan melalui pemeriksaan kondisi biasa. Pernyataan break mengakhiri perulangan yang melingkupinya, sedangkan continue melompati sisa badan dan melanjutkan ke putaran berikutnya. Selain di dalam perulangan, break juga dipakai untuk keluar dari switch klasik, sedangkan continue hanya sah di dalam perulangan.
Program berikut memuat dua pola yang sering muncul bersama, yaitu pencarian yang berhenti begitu targetnya ditemukan dengan break dan penyaringan yang melewati elemen tertentu dengan continue.
// Program pencarian dengan break dan penyaringan dengan continue
int[] angka = { 4, 9, 12, 7, 20, 15 };
// break: berhenti begitu target ditemukan
int dicari = 12;
int posisi = -1;
for (int i = 0; i < angka.Length; i++)
{
if (angka[i] == dicari)
{
posisi = i;
break;
}
}
Console.WriteLine(posisi >= 0
? $"Nilai {dicari} ditemukan pada indeks {posisi}"
: $"Nilai {dicari} tidak ada dalam array");
// continue: lewati bilangan ganjil, jumlahkan hanya bilangan genap
int jumlahGenap = 0;
foreach (int n in angka)
{
if (n % 2 != 0)
{
continue;
}
jumlahGenap += n;
}
Console.WriteLine($"Jumlah seluruh bilangan genap: {jumlahGenap}");Nilai 12 ditemukan pada indeks 2
Jumlah seluruh bilangan genap: 36Nilai 12 ditemukan pada indeks 2, dan perulangan langsung berhenti tanpa memeriksa tiga elemen berikutnya. Pada bagian kedua, bilangan ganjil 9, 7, dan 15 dilewati continue, sehingga hanya 4, 12, dan 20 yang dijumlahkan. Kedua pola tersebut memangkas pekerjaan yang tidak diperlukan, yaitu putaran yang hasilnya sudah pasti tidak dipakai. Jalankan program tersebut dari folder topik dengan perintah berikut.
# aktifkan .NET yang terpasang di sandbox
export DOTNET_ROOT=/home/kal/.dotnet PATH=/home/kal/.dotnet:$PATH DOTNET_CLI_TELEMETRY_OPTOUT=1 DOTNET_NOLOGO=1
# jalankan program contoh dari folder topik
dotnet run --file Program.csNilai 12 ditemukan pada indeks 2
Jumlah seluruh bilangan genap: 36break untuk menghentikan perulangan#
Pernyataan break menghentikan perulangan yang paling dalam melingkupinya, dan eksekusi berlanjut ke pernyataan setelah perulangan tersebut. Kegunaannya paling terasa pada pencarian, karena pemeriksaan elemen yang tersisa tidak lagi bermanfaat setelah target ditemukan. Pada perulangan bersarang, cakupan break hanya satu tingkat, sebagaimana diperlihatkan contoh berikut.
// Contoh: break hanya menghentikan perulangan terdalam
for (int baris = 1; baris <= 2; baris++)
{
for (int kolom = 1; kolom <= 4; kolom++)
{
if (kolom == 3)
{
break;
}
Console.WriteLine($"baris {baris}, kolom {kolom}");
}
}baris 1, kolom 1
baris 1, kolom 2
baris 2, kolom 1
baris 2, kolom 2Kolom 3 memicu break, sehingga kolom 4 tidak pernah dicetak pada kedua baris. Meskipun begitu, putaran luar tetap berjalan dan baris 2 tetap diproses, karena break tidak menyentuh perulangan luarnya. Apabila seluruh perulangan bersarang perlu dihentikan sekaligus, gunakan variabel penanda bool yang diperiksa pada setiap tingkat, atau pindahkan badan bersarang ke dalam metode tersendiri agar pernyataan return dapat dipakai.
Pola variabel posisi dengan nilai awal -1 pada program utama merupakan kebiasaan yang lazim untuk hasil pencarian. Nilai -1 tidak mungkin menjadi indeks sah karena indeks array selalu dimulai dari 0, sehingga kondisi setelah perulangan dapat membedakan kasus ditemukan dan tidak ditemukan tanpa variabel tambahan.
continue untuk melewati iterasi#
Pernyataan continue melompati sisa badan pada putaran yang sedang berjalan, lalu eksekusi kembali ke pemeriksaan kondisi atau ke bagian perubahan penghitung. Pernyataan ini cocok untuk penyaringan, yaitu memproses hanya elemen yang memenuhi syarat tertentu. Penempatan yang benar pada while menuntut perhatian, karena bagian perubahan penghitung tidak dijalankan secara otomatis sebagaimana pada for.
// Contoh: continue pada while, penghitung dinaikkan sebelum penyaringan
int i = 0;
while (i < 5)
{
i++;
if (i % 2 == 0)
{
continue;
}
Console.WriteLine(i);
}1
3
5Program mencetak 1, 3, dan 5 karena bilangan genap dilewati continue. Penghitung i dinaikkan pada awal badan, sehingga tetap bertambah pada setiap putaran termasuk putaran yang dilewati. Apabila peningkatan penghitung dipindahkan ke akhir badan, perulangan tidak pernah berhenti.
// tidak-dijalankan
// Contoh: penghitung dinaikkan setelah continue, sehingga perulangan tak berhingga
int i = 0;
while (i < 5)
{
if (i % 2 == 0)
{
continue; // i tidak pernah berubah, putaran ini berulang tanpa akhir
}
Console.WriteLine(i);
i++;
}Desain alur perulangan#
continue paling jelas ketika ditulis sebagai klausa penjaga (guard clause), yaitu pemeriksaan syarat yang ditempatkan di awal badan untuk menyaring kasus yang tidak diproses. Bentuk ini menjaga logika utama tetap rata pada satu tingkat lekukan, sedangkan pendekatan bersarang mendorong logika utama satu tingkat ke dalam setiap kali syarat bertambah.
// Contoh: klausa penjaga dengan continue menjaga badan perulangan tetap rata
int[] nilai = { 85, 40, 70, 95 };
foreach (int n in nilai)
{
if (n < 70)
{
continue;
}
Console.WriteLine($"Nilai {n} memenuhi batas kelulusan");
}Nilai 85 memenuhi batas kelulusan
Nilai 70 memenuhi batas kelulusan
Nilai 95 memenuhi batas kelulusanSifat break dan continue yang melompati alur membuat keduanya perlu dipakai dengan tujuan yang jelas. Gunakan break apabila keluar lebih awal menyatakan maksud program, misalnya target sudah ditemukan atau kegagalan yang tidak dapat diteruskan. Gunakan continue untuk menyaring kasus khusus di awal badan. Satu perulangan sebaiknya memiliki satu alasan berhenti, dan beberapa break di tempat yang jauh terpisah menyebarkan syarat keluar ke banyak titik sehingga perulangan sulit dianalisis. Apabila perulangan sudah memenuhi syaratnya melalui kondisi pada judulnya, pernyataan lompat tambahan justru menambah lapisan alur yang perlu dilacak pembaca.
Kesalahan umum#
- Menganggap
breakmenghentikan seluruh perulangan bersarang. Pernyataan itu hanya keluar dari perulangan terdalam, sehingga perulangan luarnya tetap berjalan dan perlu penandaboolatau pemisahan metode apabila semuanya harus berhenti. - Menempatkan perubahan penghitung
whilesetelahcontinue. Putaran yang dilewati tidak pernah mengubah penghitungnya, sehingga perulangan menjadi tak berhingga. - Melompat dengan
breakuntuk kasus yang sebenarnya sudah tercakup oleh kondisi perulangan. Alur ganda semacam ini menyembunyikan syarat berhenti di dua tempat dan menyulitkan penelusuran.
Ringkasan#
breakmengakhiri perulangan terdalam yang melingkupinya, sedangkancontinuemelompati sisa badan dan melanjutkan ke putaran berikutnya.- Pada
while, perubahan penghitung harus ditempatkan sebelumcontinueagar putaran yang dilewati tetap menggerakkan perulangan. - Keduanya paling terbaca sebagai klausa penjaga di awal badan atau sebagai keluar awal yang menyatakan maksud, dan kondisi perulangan yang dirumuskan dengan baik sering kali menggantikan keduanya.
Referensi#
- Jump statements — Microsoft Learn
— Rujukan resmi pernyataan lompat C#, mencakup
break,continue,return, dangoto. - Iteration statements — Microsoft Learn — Rujukan resmi perulangan C# sebagai konteks pemakaian kedua pernyataan lompat.