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 .

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

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

bash
go run if-else.go

Output yang Dihasilkan:

text
Predikat C: cukup, terus berlatih
Status: pelajar, tiket diskon 50%
Pemeriksaan nilai dan umur selesai.

Mari kita telaah baris demi baris program di atas:

  1. Baris 6 (nilai := 78): mendeklarasikan variabel nilai bertipe int dengan nilai awal 78 memakai deklarasi pendek.
  2. Baris 8-10 (if nilai >= 90 { ... }): memeriksa kondisi pertama. Ekspresi 78 >= 90 bernilai false, sehingga blok Predikat A dilewati dan evaluasi berlanjut ke cabang berikutnya.
  3. Baris 11-13 (else if nilai >= 80): ekspresi 78 >= 80 juga bernilai false, jadi blok Predikat B kembali dilewati.
  4. Baris 14-16 (else if nilai >= 70): ekspresi 78 >= 70 bernilai true. Go mencetak Predikat C lalu melompat ke akhir rantai — cabang else tidak dievaluasi sama sekali.
  5. Baris 21 dan 23-25 (umur := 17 dan if umur < 18): memakai if tunggal tanpa else. Kondisi 17 < 18 bernilai true sehingga blok diskon dijalankan; bila kondisi false, program hanya melanjutkan ke baris berikutnya.
  6. 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:

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

Berkas Sumber

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

if-else.go

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