Program nyata hampir selalu mengulang pekerjaan: mencetak tiap baris laporan, memeriksa tiap sensor, atau menghitung mundur sebelum sesi dimulai. Bahasa lain menyediakan beberapa kata kunci perulangan sekaligus — for, while, do-while — tetapi Go memilih jalan berbeda: hanya for, dengan bentuk yang lentur untuk semua kebutuhan. Pada chapter ini kita mempelajari tiga bentuk klasiknya, bentuk modern for i := range n sejak Go 1.22, serta perulangan bersarang untuk kasus dua dimensi.
Satu Kata Kunci untuk Semua Kebutuhan #
Bentuk for menyesuaikan klausa yang kita tulis. Tabel berikut memetakan empat bentuk yang akan kita bahas:
| Bentuk | Sintaks | Setara di bahasa lain |
|---|---|---|
| Gaya C | for i := 0; i < n; i++ { } | for klasik |
| Hanya kondisi | for sisa > 0 { } | while (sisa > 0) |
| Tanpa klausa | for { } | while (true) |
| Rentang bilangan | for i := range n { } | — (khas Go 1.22+) |
Bentuk gaya C terdiri dari tiga klausa yang dipisahkan titik koma: statement awal, kondisi kelanjutan, dan statement akhir tiap iterasi. Bentuk hanya-kondisi membuang klausa awal dan akhir, sehingga for sisa > 0 terbaca persis seperti while. Bentuk tanpa klausa berjalan selamanya dan berhenti hanya lewat break — kata kunci yang akan kita bedah tuntas pada chapter break dan continue
.
range over int: Bentuk Modern Sejak Go 1.22 #
Mengulang dari 0 sampai n-1 adalah kebutuhan paling umum, dan sebelum Go 1.22 kita harus menulis for i := 0; i < n; i++. Sejak Go 1.22, for i := range n memberikan bentuk yang lebih ringkas: i bernilai 0, 1, 2, ... hingga n-1 untuk n bertipe bilangan bulat. Bentuk lama tetap sah, tetapi bentuk baru kini menjadi gaya yang disarankan untuk iterasi berhitung.
for i := range 3 {
fmt.Println("Baris ke-", i+1)
}Sejak versi yang sama, variabel perulangan juga dibuat baru di setiap iterasi — perubahan penting yang akan kita lihat kembali saat membahas defer dan closure.
Program Utuh: Lima Skema Perulangan #
Program berikut mempraktikkan seluruh bentuk di atas, lalu menutup dengan perulangan bersarang yang mencetak segitiga bintang. Berkas for-loop.go pada bagian bawah halaman memuat program yang sama:
package main
import "fmt"
func main() {
// Bentuk 1: klausa init, kondisi, dan post statement.
for i := 1; i <= 3; i++ {
fmt.Println("Iterasi ke-", i)
}
// Bentuk 2: hanya kondisi, setara while di bahasa lain.
sisa := 5
for sisa > 0 {
fmt.Println("Sisa undangan:", sisa)
sisa--
}
// Bentuk 3: tanpa klausa apa pun, berjalan selamanya.
gelombang := 0
for {
fmt.Println("Gelombang:", gelombang)
gelombang++
if gelombang > 2 {
break
}
}
// Bentuk 4: range over int, tersedia sejak Go 1.22.
for i := range 3 {
fmt.Println("Baris ke-", i+1)
}
// Perulangan bersarang: segitiga bintang.
for baris := 1; baris <= 4; baris++ {
pola := ""
for bintang := 0; bintang < baris; bintang++ {
pola += "*"
}
fmt.Println(pola)
}
}Jalankan program dari direktori chapter dengan perintah berikut:
go run for-loop.goOutput yang Dihasilkan:
Iterasi ke- 1
Iterasi ke- 2
Iterasi ke- 3
Sisa undangan: 5
Sisa undangan: 4
Sisa undangan: 3
Sisa undangan: 2
Sisa undangan: 1
Gelombang: 0
Gelombang: 1
Gelombang: 2
Baris ke- 1
Baris ke- 2
Baris ke- 3
*
**
***
****Mari kita telaah baris demi baris program di atas:
- Baris 7-9 (
for i := 1; i <= 3; i++): bentuk gaya C. Klausa awali := 1berjalan sekali, kondisii <= 3diperiksa sebelum tiap iterasi, dani++berjalan setelah tiap iterasi. Loop mencetak tiga baris lalu berhenti ketikaimencapai 4. - Baris 12-16 (
sisa := 5danfor sisa > 0): bentuk hanya-kondisi. Variabelsisadideklarasikan di luar loop, dikurangisisa--di dalam badan, dan loop berhenti ketikasisamencapai 0. - Baris 19-26 (
for { ... }): bentuk tanpa klausa yang berjalan selamanya. Kata kuncibreakpada baris 24 keluar dari loop ketikagelombangmelewati 2 — tanpabreak, program tidak pernah selesai. - Baris 29-31 (
for i := range 3): bentuk rentang bilangan. Nilaiibergerak dari 0 sampai 2, dan kita mencetaknya sebagaii+1agar terbaca mulai dari 1. - Baris 34-41 (perulangan bersarang): loop luar mengatur jumlah baris (1 sampai 4). Loop dalam menambahkan satu
*ke stringpolasebanyak nilaibarissaat itu, lalu hasilnya dicetak sekali per baris — menghasilkan segitiga yang makin lebar ke bawah. - Variabel
i,sisa,gelombang,baris,bintang: masing-masing hanya hidup di dalam loop terkait. Namaiboleh dipakai ulang pada baris 29 karenaidari loop pertama sudah tidak hidup.
Perulangan pada program di atas memakai bilangan dan string yang sudah kita susun sendiri. Pekerjaan sehari-hari lebih sering mengiterasi koleksi yang sudah ada — slice, map, hingga channel — dan untuk itu Go menyediakan bentuk for range, topik chapter berikutnya.
Referensi #
- Spesifikasi Go: For statements
— definisi resmi seluruh bentuk
for. - A Tour of Go: Flow control
— latihan interaktif perulangan
for. - Rilis Go 1.22
— pengumuman resmi
for i := range ndan variabel perulangan per-iterasi.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
for-loop.go
Unduh berkaspackage main
import "fmt"
func main() {
// Bentuk 1: klausa init, kondisi, dan post statement.
for i := 1; i <= 3; i++ {
fmt.Println("Iterasi ke-", i)
}
// Bentuk 2: hanya kondisi, setara while di bahasa lain.
sisa := 5
for sisa > 0 {
fmt.Println("Sisa undangan:", sisa)
sisa--
}
// Bentuk 3: tanpa klausa apa pun, berjalan selamanya.
gelombang := 0
for {
fmt.Println("Gelombang:", gelombang)
gelombang++
if gelombang > 2 {
break
}
}
// Bentuk 4: range over int, tersedia sejak Go 1.22.
for i := range 3 {
fmt.Println("Baris ke-", i+1)
}
// Perulangan bersarang: segitiga bintang.
for baris := 1; baris <= 4; baris++ {
pola := ""
for bintang := 0; bintang < baris; bintang++ {
pola += "*"
}
fmt.Println(pola)
}
}