Program yang berguna jarang berjalan lurus dari baris pertama sampai baris terakhir. Sistem login harus memeriksa kata sandi, aplikasi cuaca harus memilih pesan sesuai suhu udara, dan aplikasi kasir harus menghitung diskon hanya untuk pelanggan tertentu. Struktur if adalah alat Go untuk mengambil keputusan semacam itu: mengeksekusi satu blok kode hanya ketika sebuah kondisi bernilai true. Pada chapter ini kita mempelajari bentuk dasar if, rantai else if dan else, serta dua aturan gaya penulisan yang membedakan Go dari C dan Java.
Bentuk Dasar if #
Kata kunci if diikuti satu ekspresi boolean, lalu blok kode di dalam kurung kurawal. Ketika ekspresi bernilai true, Go mengeksekusi seluruh statement di dalam blok; ketika false, Go melewati blok tersebut seluruhnya. Ekspresi perbandingan seperti suhu > 30 menghasilkan nilai boolean — operator pembentuknya sudah kita bahas pada chapter Operator Perbandingan
.
if suhu > 30 {
fmt.Println("Cuaca panas, minum air putih.")
}Go sengaja tidak memakai tanda kurung di sekitar kondisi. Penulisan if (suhu > 30) tetap dapat dikompilasi karena ekspresi bertanda kurung adalah ekspresi yang sah, tetapi gaya resmi Go — gaya yang dipakai seluruh standard library — selalu menulis kondisi tanpa tanda kurung. Kebiasaan dari C, Java, dan JavaScript sebaiknya kita tinggalkan supaya kode Go terlihat idiomatik.
Rantai else if dan else #
Satu if hanya menampung dua kemungkinan: kondisi benar atau salah. Ketika program harus memilih di antara banyak cabang, kita menambahkan else if untuk kondisi tambahan dan else sebagai cabang penampung terakhir. Go mengevaluasi kondisi dari atas ke bawah, mengeksekusi blok pertama yang bernilai true, lalu melompat ke akhir rantai — cabang-cabang setelahnya tidak pernah diperiksa ulang.
Program lengkap berikut menggolongkan nilai ujian menjadi empat predikat, lalu memakai if tunggal untuk memeriksa kategori umur. Berkas if-else.go pada bagian bawah halaman memuat program yang sama dan dapat dijalankan langsung:
package main
import "fmt"
func main() {
nilai := 78
if nilai >= 90 {
fmt.Println("Predikat A: luar biasa")
} else if nilai >= 80 {
fmt.Println("Predikat B: bagus")
} else if nilai >= 70 {
fmt.Println("Predikat C: cukup, terus berlatih")
} else {
fmt.Println("Predikat D: ikuti remedial")
}
umur := 17
if umur < 18 {
fmt.Println("Status: pelajar, tiket diskon 50%")
}
fmt.Println("Pemeriksaan nilai dan umur selesai.")
}Jalankan program dari direktori chapter dengan perintah berikut:
go run if-else.goOutput yang Dihasilkan:
Predikat C: cukup, terus berlatih
Status: pelajar, tiket diskon 50%
Pemeriksaan nilai dan umur selesai.Mari kita telaah baris demi baris program di atas:
- Baris 6 (
nilai := 78): mendeklarasikan variabelnilaibertipeintdengan nilai awal 78 memakai deklarasi pendek. - Baris 8-10 (
if nilai >= 90 { ... }): memeriksa kondisi pertama. Ekspresi78 >= 90bernilaifalse, sehingga blok Predikat A dilewati dan evaluasi berlanjut ke cabang berikutnya. - Baris 11-13 (
else if nilai >= 80): ekspresi78 >= 80juga bernilaifalse, jadi blok Predikat B kembali dilewati. - Baris 14-16 (
else if nilai >= 70): ekspresi78 >= 70bernilaitrue. Go mencetak Predikat C lalu melompat ke akhir rantai — cabangelsetidak dievaluasi sama sekali. - Baris 21 dan 23-25 (
umur := 17danif umur < 18): memakaiiftunggal tanpaelse. Kondisi17 < 18bernilaitruesehingga blok diskon dijalankan; bila kondisifalse, program hanya melanjutkan ke baris berikutnya. - Baris 27 (
fmt.Println("Pemeriksaan ...")): mencetak pesan penutup dan membuktikan alur program berjalan normal setelah seluruh rantai selesai dievaluasi.
Kurung Kurawal Selalu Wajib #
Berbeda dengan C, Go tidak mengizinkan if tanpa blok kurung kurawal, walaupun isi blok hanya satu statement. Potongan kode berikut gagal dikompilasi:
if suhu > 30
fmt.Println("Cuaca panas")Kompilator Go melaporkan syntax error: unexpected newline, expected { after if clause dan menolak program tersebut. Aturan ini sengaja diambil untuk menghilangkan seluruh kelas galat “statement bergantung pada satu baris” yang terkenal pada bahasa turunan C. Hasilnya, blok if di Go selalu tampak konsisten: kurung kurawal buka di akhir baris if, isi menjorok satu tab, kurung kurawal tutup sejajar dengan if.
Diagram berikut merangkum alur pengambilan keputusan pada rantai if yang memeriksa suhu:
Dengan menguasai if, else if, dan else, kita sudah bisa membangun cabang keputusan apa pun. Sering kali keputusan tersebut membutuhkan data yang harus dihitung lebih dulu — misalnya hasil konversi teks menjadi angka. Go menyediakan bentuk if dengan initializer untuk kebutuhan itu, yang menjadi topik chapter berikutnya.
Referensi #
- Spesifikasi Go: If statements
— definisi resmi sintaks dan semantik
if. - Effective Go: if
— pembahasan gaya penulisan
ifdan initializer. - A Tour of Go: Flow control — tur interaktif statement kendali alur.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
if-else.go
Unduh berkaspackage main
import "fmt"
func main() {
nilai := 78
if nilai >= 90 {
fmt.Println("Predikat A: luar biasa")
} else if nilai >= 80 {
fmt.Println("Predikat B: bagus")
} else if nilai >= 70 {
fmt.Println("Predikat C: cukup, terus berlatih")
} else {
fmt.Println("Predikat D: ikuti remedial")
}
umur := 17
if umur < 18 {
fmt.Println("Status: pelajar, tiket diskon 50%")
}
fmt.Println("Pemeriksaan nilai dan umur selesai.")
}