Perulangan yang berjalan sampai habis bukan satu-satunya pola yang kita butuhkan. Sensor suhu harus berhenti memeriksa begitu pembacaan kritis muncul, laporan bulanan harus melewati baris kosong tanpa menghentikan seluruh proses, dan pencarian data selesai lebih awal ketika target ditemukan. Dua kata kunci Go mengurus kebutuhan tersebut: break menghentikan perulangan lebih awal, sedangkan continue melewati sisa iterasi saat ini dan lanjut ke iterasi berikutnya. Pada chapter ini kita memakai keduanya, lalu menemukan batas penting break pada perulangan bersarang — batas yang dibuka jalan keluarnya di chapter berikutnya.
break: Berhenti Lebih Awal #
Kata kunci break segera mengakhiri perulangan yang paling dalam sedang berjalan. Alur program melompat ke statement tepat setelah loop, dan sisa iterasi tidak pernah dievaluasi. Pola ini khas untuk pencarian dan pemeriksaan fail-fast: begitu satu kondisi fatal terpenuhi, tidak ada alasan melanjutkan pemeriksaan sisanya.
continue: Lewatkan Sisa Iterasi #
Kata kunci continue menghentikan iterasi saat ini saja, lalu memindahkan alur ke evaluasi kondisi atau post statement untuk iterasi berikutnya. Perulangan itu sendiri tetap hidup. Pola ini khas untuk penyaringan data: elemen yang tidak memenuhi syarat dilewati tanpa mengganggu pemrosesan elemen lain.
Program Utuh: Pemeriksaan Suhu dan Matriks #
Program pertama memeriksa daftar pembacaan suhu. Suhu normal dicetak apa adanya, suhu tinggi ditangani lalu iterasi berlanjut, dan suhu kritis menghentikan seluruh pemeriksaan. Program kedua menunjukkan perilaku break pada perulangan bersarang. Berkas break-continue.go pada bagian bawah halaman memuat kedua bagian ini:
package main
import "fmt"
func main() {
temperatur := []int{28, 31, 30, 35, 27, 33}
for _, t := range temperatur {
if t >= 34 {
fmt.Println("Suhu kritis", t, "derajat, pemeriksaan dihentikan")
break
}
if t >= 30 {
fmt.Println("Suhu tinggi", t, "derajat, aktifkan pendinginan")
continue
}
fmt.Println("Suhu normal", t, "derajat")
}
matriks := [][]int{
{1, 2, 3},
{4, 5, 6},
}
for _, baris := range matriks {
for _, nilai := range baris {
if nilai == 2 {
fmt.Println("Nilai 2 ditemukan, perulangan dalam berhenti")
break
}
fmt.Println("Memproses nilai:", nilai)
}
fmt.Println("Baris selesai diproses")
}
}Jalankan program dari direktori chapter dengan perintah berikut:
go run break-continue.goOutput yang Dihasilkan:
Suhu normal 28 derajat
Suhu tinggi 31 derajat, aktifkan pendinginan
Suhu tinggi 30 derajat, aktifkan pendinginan
Suhu kritis 35 derajat, pemeriksaan dihentikan
Memproses nilai: 1
Nilai 2 ditemukan, perulangan dalam berhenti
Baris selesai diproses
Memproses nilai: 4
Memproses nilai: 5
Memproses nilai: 6
Baris selesai diprosesMari kita telaah baris demi baris program di atas:
- Baris 6 (
temperatur := []int{...}): membuat slice berisi enam pembacaan suhu yang akan diperiksa satu per satu. - Baris 8-18 (
for _, t := range temperatur): mengiterasi seluruh pembacaan. Blokifpertama menangani suhu kritis, blok kedua suhu tinggi, dan sisanya dicetak sebagai normal. - Baris 10-12 (
if t >= 34danbreak): ketika pembacaan mencapai 35,breakmengakhiri seluruh loop. Dua pembacaan tersisa — 27 dan 33 — tidak pernah diperiksa, seperti terlihat pada output. - Baris 13-16 (
if t >= 30dancontinue): pembacaan 31 dan 30 hanya mencetak penanganan pendinginan, lalucontinuemelompatifmt.Printlndi baris 16 dan lanjut ke iterasi berikutnya. Perhatikan urutan output:continuetidak menghentikan loop. - Baris 20-24 (
matriks := [][]int{...}): membuat slice dua dimensi — slice berisi dua slice — untuk mengujibreakbersarang. - Baris 26-33 (perulangan bersarang): loop luar mengambil tiap baris, loop dalam memproses tiap nilai.
breakdi baris 29 hanya mengakhiri loop dalam: nilai 2 menghentikan baris pertama, tetapi baris kedua tetap diproses penuh — terbukti dari empat baris output terakhir. - Baris 34 (
fmt.Println("Baris selesai diproses")): berada di dalam loop luar, sehingga tercetak sekali per baris. Posisi inilah tempat alur mendarat setelahbreakloop dalam.
Kedua kata kunci ini cukup untuk hampir seluruh kebutuhan kendali loop. Untuk satu kasus tersisa — keluar dari banyak tingkat perulangan sekaligus — Go menyiapkan label bernama yang dapat dituju break dan continue, sekaligus kata kunci goto yang jarang dibutuhkan. Keduanya kita bahas di chapter berikutnya.
Referensi #
- Spesifikasi Go: For statements
— semantik
breakdancontinuedi dalamfor. - Effective Go: switch
— membahas
breakimplisit padaswitch. - A Tour of Go: Flow control
— latihan interaktif
breakdancontinue.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
break-continue.go
Unduh berkaspackage main
import "fmt"
func main() {
temperatur := []int{28, 31, 30, 35, 27, 33}
for _, t := range temperatur {
if t >= 34 {
fmt.Println("Suhu kritis", t, "derajat, pemeriksaan dihentikan")
break
}
if t >= 30 {
fmt.Println("Suhu tinggi", t, "derajat, aktifkan pendinginan")
continue
}
fmt.Println("Suhu normal", t, "derajat")
}
matriks := [][]int{
{1, 2, 3},
{4, 5, 6},
}
for _, baris := range matriks {
for _, nilai := range baris {
if nilai == 2 {
fmt.Println("Nilai 2 ditemukan, perulangan dalam berhenti")
break
}
fmt.Println("Memproses nilai:", nilai)
}
fmt.Println("Baris selesai diproses")
}
}