Selamat datang kembali di petualangan Becoming Gopher! Di episode sebelumnya, kita sudah sukses memberikan ‘otak’ pada program kita. Kode kita sekarang bisa menganalisis kondisi dan memilih jalan yang berbeda menggunakan if
dan switch
.
Seorang petualang seringkali harus melakukan hal yang sama berulang kali—berjalan ribuan langkah, mendayung puluhan kali, atau memeriksa setiap barang di dalam tas. Program kita juga butuh kemampuan itu. Jika tidak, bagaimana kita bisa memproses ratusan data pengguna atau menampilkan daftar produk satu per satu?
Hari ini, kita akan melatih ‘stamina’ program kita. Kita akan berkenalan dengan:
Array
: ‘Rak penyimpanan’ pertama kita untuk menampung banyak data sejenis secara terorganisir.For
: Satu-satunya ‘mesin pengulang’ di Go yang akan membuat program kita bisa bekerja secara efisien tanpa perlu menulis kode yang sama berulang kali.
Siapkan staminamu, karena kita akan membuat program yang jauh lebih efisien. Ayo kita mulai!
Array
: Rak Penyimpanan Data Pertama Kita
Bayangkan kamu ingin menyimpan daftar belanjaan: “apel”, “roti”, “susu”. Membuat tiga variabel berbeda (belanjaan1
, belanjaan2
, belanjaan3
) tentu sangat tidak praktis. Di sinilah array
datang sebagai penyelamat.
Array adalah tipe data yang berisi kumpulan data dengan tipe yang sama dan ukuran yang sudah pasti.
Bayangkan array
seperti sebuah rak buku dengan jumlah slot yang sudah ditentukan. Jika rak punya 5 slot, kamu hanya bisa menaruh 5 buku, tidak lebih dan tidak kurang.
Membuat dan Menggunakan Array
Untuk membuat array, kita tentukan jumlah slot dan tipe datanya.
// Membuat array untuk menampung 3 nama (string)var namaTeman [3]string
// Mengisi setiap "slot" arraynamaTeman[0] = "Budi"namaTeman[1] = "Citra"namaTeman[2] = "Eka"
// Mengakses data di slot tertentufmt.Println("Teman pertama:", namaTeman[0]) // Teman pertama: Budifmt.Println("Teman ketiga:", namaTeman[2]) // Teman ketiga: Eka
Kita juga bisa langsung mengisi array saat membuatnya.
// Membuat array nilai dengan 5 slot yang langsung diisinilaiUjian := [5]int{80, 90, 75, 100, 85}
fmt.Println("Nilai kedua:", nilaiUjian[1]) // Nilai kedua: 90fmt.Println("Panjang array:", len(nilaiUjian)) // Panjang array: 5
Jika malas menghitung jumlah datanya, kita bisa gunakan [...]
dan biarkan Go yang menghitungnya untuk kita.
// Go akan otomatis tahu bahwa array ini berukuran 4hari := [...]string{"Senin", "Selasa", "Rabu", "Kamis"}
Meskipun berguna, keterbatasan utama array
adalah ukurannya yang kaku dan tidak bisa diubah. Inilah alasan mengapa nanti kita akan belajar tipe data lain yang lebih fleksibel.
For
Loop: Mesin Pengulang Serbaguna
Sekarang kita punya array yang berisi banyak data. Bagaimana cara kita melihat semua isinya satu per satu tanpa menulis fmt.Println() berkali-kali? Jawabannya adalah dengan perulangan atau loop.
Di Go, hanya ada satu kata kunci untuk perulangan: for
. Tapi jangan salah, for
di Go sangat serbaguna dan bisa berperan seperti while
atau foreach
di bahasa lain.
For
Loop Klasik (dengan Counter)
Ini adalah bentuk paling umum yang mungkin pernah kamu lihat di bahasa lain. Strukturnya terdiri dari tiga bagian yang dipisahkan titik koma:
- init: Pernyataan awal (misal:
i := 0
), dijalankan sekali sebelum loop dimulai. - condition: Kondisi yang dicek setiap awal iterasi. Jika
true
, loop lanjut. Jikafalse
, loop berhenti. - post: Pernyataan yang dijalankan setiap akhir iterasi (misal:
i++
).
// Loop dari 1 sampai 5for i := 1; i <= 5; i++ { fmt.Println("Lompatan ke-", i)}// Output:// Lompatan ke- 1// Lompatan ke- 2// Lompatan ke- 3// Lompatan ke- 4// Lompatan ke- 5
For
Loop Gaya While
Jika kita menghilangkan bagian init
dan post
, for
loop akan berfungsi seperti while
loop. Ia akan terus berjalan selama kondisinya true
.
angka := 1for angka < 5 { fmt.Println("Angka saat ini:", angka) angka = angka * 2}// Output:// Angka saat ini: 1// Angka saat ini: 2// Angka saat ini: 4
For-Range
: Cara Terbaik untuk Koleksi Data
Ini adalah cara paling “Go-like” dan paling nyaman untuk melakukan perulangan pada array
(dan nanti pada slice
serta map
). for-range
akan otomatis memberikan kita index dan value dari setiap elemen.
// Menggunakan array 'hari' yang sudah kita buat sebelumnyahari := [...]string{"Senin", "Selasa", "Rabu", "Kamis"}
for index, namaHari := range hari { fmt.Printf("Hari ke-%d adalah %s\n", index+1, namaHari)}
Jika kamu tidak butuh index-nya, kamu bisa menggantinya dengan _
(underscore).
for _, namaHari := range hari { fmt.Println(namaHari)}
Break
dan Continue
: Mengontrol Alur Perulangan
Terkadang, kita perlu sedikit kontrol lebih di dalam loop.
break
: Digunakan untuk keluar paksa dari perulangan, bahkan jika kondisinya masihtrue
.continue
: Digunakan untuk menghentikan iterasi saat ini dan langsung loncat ke iterasi berikutnya.
// Contoh penggunaan break dan continuefor i := 1; i <= 10; i++ { if i%2 == 0 { // Lewati semua angka genap continue }
if i > 7 { // Jika angka sudah lebih dari 7, hentikan seluruh loop break }
fmt.Println("Angka ganjil:", i)}// Output:// Angka ganjil: 1// Angka ganjil: 3// Angka ganjil: 5// Angka ganjil: 7
Petualangan Hari Ini Selesai!
Hebat! Hari ini kita sudah menambahkan dua kemampuan super pada program kita: kemampuan untuk menyimpan banyak data dalam sebuah array
, dan kemampuan untuk melakukan tugas berulang secara otomatis dengan for
loop. Program kita kini jauh lebih efisien.
Singkatnya, kita sudah belajar:
- Menyimpan data sejenis dalam
array
dengan ukuran yang pasti. - Menggunakan berbagai gaya
for
loop untuk kebutuhan yang berbeda. - Cara paling elegan untuk mengiterasi
array
menggunakanfor-range
. - Mengontrol alur perulangan dengan break dan continue.
Meskipun array
berguna, ukurannya yang kaku seringkali menjadi batasan. Di petualangan berikutnya, kita akan bertemu dengan ‘kakak super’-nya array
, yaitu slice
, dan juga struktur data super fleksibel bernama map
. Ini akan benar-benar mengubah cara kita mengelola data di Go!