if menjalankan sebuah blok kode cuma kalau kondisinya true; else if dan else menambah cabang lain. Bayangin aturan promo di kasir Warung Bakso Mas Bimo: belanja Rp50.000 ke atas gratis es teh, Rp30.000 ke atas gratis kerupuk, di bawah itu belum dapat bonus. Kasir membaca aturannya dari atas. Begitu satu aturan cocok, dia kasih bonusnya dan aturan di bawahnya gak dibaca lagi.
🧪 Tebakan cepat: urutan ceknya dibalik,
total >= 30000dulu barutotal >= 50000. Pelanggan belanja Rp60.000. Dia dapat es teh atau kerupuk? Tebak dulu, jawabannya ada di bagian "Urutan kondisinya penting".
if, else if, else
package main
import "fmt"
func main() {
total := 45000
if total >= 50000 {
fmt.Println("Gratis es teh")
} else if total >= 30000 {
fmt.Println("Gratis kerupuk")
} else {
fmt.Println("Belum dapat bonus")
}
}
$ go run bakso.go
Gratis kerupuk
total |
>= 50000 |
>= 30000 |
Tercetak |
|---|---|---|---|
| 60000 | true | (gak dicek) | Gratis es teh |
| 45000 | false | true | Gratis kerupuk |
| 20000 | false | false | Belum dapat bonus |
- Kondisinya ditulis tanpa kurung:
if total >= 50000 {. Go menerima kurung, tapigofmt(perapi kode bawaan Go) langsung menghapusnya, jadi gak ada yang menulisnya. - Kurung kurawal wajib, walau isinya cuma satu baris.
{harus di baris yang sama denganif. else ifdanelseditulis di baris yang sama dengan}penutup blok sebelumnya.elsedi akhir boleh gak ada. Tanpaelse, total 20000 gak mencetak apa-apa.
Urutan kondisinya penting
Go mengecek dari atas ke bawah dan berhenti di kondisi pertama yang true. Kalau urutannya dibalik, total >= 30000 sudah true untuk 60000, jadi yang tercetak Gratis kerupuk, dan cabang es teh gak akan pernah kepakai. Itu jawaban tebakannya. Aturan bertingkat ditulis dari yang paling ketat: angka terbesar dulu.
Kalau else dihapus dan jadi dua if terpisah, dua-duanya dicek. Total 60000 lalu mencetak Gratis es teh dan Gratis kerupuk. Satu rantai if/else if cuma menjalankan satu cabang.
Di latihan, rantai ini dipakai di dalam fungsi, blok kode bernama yang bisa dipanggil berkali-kali:
func bonus(total int) string {
if total >= 50000 {
return "Gratis es teh"
} else if total >= 30000 {
return "Gratis kerupuk"
}
return "Belum dapat bonus"
}
func bonus(total int) stringartinya fungsibonusmenerimatotalbertipeintdan mengembalikanstring.returnmengirim nilai balik ke pemanggil dan langsung keluar dari fungsi. Baris sesudahnya gak jalan.fmt.Println(bonus(60000))mencetakGratis es teh. Detail fungsi ada di pelajaran fungsi nanti.
Kondisi harus bool
Di JavaScript, if (stok) jalan untuk angka selain 0. Go gak punya truthy dan falsy: kondisi harus bernilai bool.
if stok {denganstok := 3gagal dengannon-boolean condition in if statement. Tulisif stok > 0 {.if total = 50000 {(satu=) gagal dengansyntax error: cannot use assignment total = 50000 as value. Membandingkan pakai==.- Beberapa syarat digabung dengan
&&dan||:if total >= 50000 && lunas {.
if dengan short statement
if boleh diawali satu statement pendek, dipisah titik koma dari kondisinya:
total := 45000
bayar := 100000
if kembalian := bayar - total; kembalian > 0 {
fmt.Println("Kembalian:", kembalian)
} else {
fmt.Println("Uang pas")
}
Kembalian: 55000
kembalian := bayar - totaljalan duluan, lalukembalian > 0dicek.kembaliancuma ada di dalam blokifdanelseitu. Memakainya sesudah}gagal denganundefined: kembalian. Variabel sementara gak bocor ke luar.- Pola ini akan sering kamu lihat di pelajaran error:
if err := simpan(); err != nil {.
Gak ada ternary
Go gak punya operator kondisi ? a : b. bonus := total >= 50000 ? "es teh" : "kerupuk" ditolak dengan invalid character U+003F '?'. Tulis dengan if:
bonus := "kerupuk"
if total >= 50000 {
bonus = "es teh"
}
⚠️ Jebakan yang sering ketemu
elsedi baris baru.}laluelse {di baris berikutnya gagal dengansyntax error: unexpected keyword else, expected }. Tulis} else {di satu baris.{di baris baru.if total >= 50000lalu{di bawahnya gagal dengansyntax error: unexpected newline, expected { after if clause.- Urutan terbalik. Kondisi yang longgar di atas menelan kondisi yang ketat di bawahnya.
ifterpisah padahal maunya satu cabang. Tanpaelse, beberapa cabang bisa jalan sekaligus.
TL;DR: if kondisi { ... } else if kondisi { ... } else { ... }: tanpa kurung di kondisi, kurung kurawal wajib, { dan else di baris yang sama dengan }. Go mengecek dari atas dan menjalankan cabang pertama yang true saja, jadi tulis aturan bertingkat dari yang paling ketat. Kondisi harus bool: gak ada truthy/falsy, tulis stok > 0. if x := ...; kondisi { menjalankan statement pendek dulu, dan x cuma ada di dalam blok if/else itu. Gak ada ternary ? :, pakai if. Di dalam fungsi, return mengirim hasil dan langsung keluar.