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:

BentukSintaksSetara di bahasa lain
Gaya Cfor i := 0; i < n; i++ { }for klasik
Hanya kondisifor sisa > 0 { }while (sisa > 0)
Tanpa klausafor { }while (true)
Rentang bilanganfor 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.

go
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:

go
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:

bash
go run for-loop.go

Output yang Dihasilkan:

text
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:

  1. Baris 7-9 (for i := 1; i <= 3; i++): bentuk gaya C. Klausa awal i := 1 berjalan sekali, kondisi i <= 3 diperiksa sebelum tiap iterasi, dan i++ berjalan setelah tiap iterasi. Loop mencetak tiga baris lalu berhenti ketika i mencapai 4.
  2. Baris 12-16 (sisa := 5 dan for sisa > 0): bentuk hanya-kondisi. Variabel sisa dideklarasikan di luar loop, dikurangi sisa-- di dalam badan, dan loop berhenti ketika sisa mencapai 0.
  3. Baris 19-26 (for { ... }): bentuk tanpa klausa yang berjalan selamanya. Kata kunci break pada baris 24 keluar dari loop ketika gelombang melewati 2 — tanpa break, program tidak pernah selesai.
  4. Baris 29-31 (for i := range 3): bentuk rentang bilangan. Nilai i bergerak dari 0 sampai 2, dan kita mencetaknya sebagai i+1 agar terbaca mulai dari 1.
  5. Baris 34-41 (perulangan bersarang): loop luar mengatur jumlah baris (1 sampai 4). Loop dalam menambahkan satu * ke string pola sebanyak nilai baris saat itu, lalu hasilnya dicetak sekali per baris — menghasilkan segitiga yang makin lebar ke bawah.
  6. Variabel i, sisa, gelombang, baris, bintang: masing-masing hanya hidup di dalam loop terkait. Nama i boleh dipakai ulang pada baris 29 karena i dari 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 #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

for-loop.go

Unduh berkas
go
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)
	}
}