Hampir setiap keputusan dalam program bermuara pada satu pertanyaan ya atau tidak: apakah pengguna sudah login, apakah stok masih tersedia, apakah nilai valid. Tipe bool milik Go menampung dua kemungkinan itu lewat nilai true dan false, tanpa nilai ketiga dan tanpa konversi otomatis dari angka. Pada chapter ini kita akan membuat nilai boolean dari perbandingan, menggabungkannya dengan operator logika, lalu membuktikan perilaku short-circuit yang kerap menentukan efisiensi program.
Nilai true dan false #
Tipe bool hanya memiliki dua nilai: true dan false. Keduanya adalah predeclared identifier Go, bukan sekadar angka 1 dan 0 seperti di bahasa C. Deklarasinya sama dengan tipe lain:
var sudahLunas bool = true
hargaMahal := falseZero value bool adalah false, sehingga var aktif bool tanpa nilai awal langsung berisi false, sesuai pembahasan chapter Zero Value
.
Boolean dari Operator Perbandingan #
Nilai boolean paling sering lahir dari operator perbandingan: ==, !=, <, >, <=, dan >=. Hasil setiap perbandingan selalu bertipe bool, apa pun tipe operannya:
umur := 20
bolehMasuk := umur >= 17 // true
nama := "Siti"
cocok := nama == "Siti" // truePerbandingan string dengan == membandingkan isi teksnya secara utuh, huruf demi huruf, sehingga "Siti" == "siti" menghasilkan false karena kapitalnya berbeda.
Operator Logika &&, ||, dan ! #
Tiga operator logika menggabungkan atau membalik nilai boolean. Tabel berikut merangkum hasil kombinasi kedua operand untuk && dan ||:
| Operand kiri | Operand kanan | && (AND) | || (OR) |
|—|—|—|—|
| true | true | true | true |
| true | false | false | true |
| false | true | false | true |
| false | false | false | false |
Operator && menghasilkan true hanya ketika kedua operand true. Operator || menghasilkan true ketika salah satu operand true. Operator ! (NOT) menerima satu operand dan membalik nilainya: !true menjadi false dan !false menjadi true.
Program Utuh #
Berkas boolean-demo.go mempraktikkan perbandingan, kombinasi operator, dan short-circuit. Jalankan berkas tersebut dari direktori chapter:
go run boolean-demo.gopackage main
import "fmt"
func cekGudang() bool {
fmt.Println("Cek gudang dijalankan")
return true
}
func main() {
umur := 20
bolehMasuk := umur >= 17
fmt.Println("Boleh masuk:", bolehMasuk)
hargaMahal := true
stokKosong := false
tampilkanDiskon := hargaMahal && !stokKosong
fmt.Println("Tampilkan diskon:", tampilkanDiskon)
fmt.Println("Evaluasi stokKosong || cekGudang():")
adaBarang := stokKosong || cekGudang()
fmt.Println("adaBarang =", adaBarang)
fmt.Println("Evaluasi stokKosong && cekGudang():")
layakJual := stokKosong && cekGudang()
fmt.Println("layakJual =", layakJual)
}Output yang Dihasilkan:
Boleh masuk: true
Tampilkan diskon: true
Evaluasi stokKosong || cekGudang():
Cek gudang dijalankan
adaBarang = true
Evaluasi stokKosong && cekGudang():
layakJual = falseMari kita telaah baris demi baris program di atas:
- Baris 5 (
func cekGudang() bool): mendeklarasikan fungsi pengembalianboolyang mencetak satu baris teks setiap kali dipanggil — jejak ini yang akan membuktikan short-circuit. - Baris 13 (
bolehMasuk := umur >= 17): menyimpan hasil perbandingan20 >= 17, yaitutrue. - Baris 18 (
tampilkanDiskon := hargaMahal && !stokKosong): menghitungtrue && !falsemenjaditrue, memperlihatkan gabungan operator NOT dan AND. - Baris 22 (
adaBarang := stokKosong || cekGudang()): karenastokKosongbernilaifalse, operator||harus mengevaluasi sisi kanan; barisCek gudang dijalankanmuncul di output. - Baris 25 (
layakJual := stokKosong && cekGudang()): karenastokKosongsudahfalse, operator&&langsung menyimpulkanfalsetanpa memanggilcekGudang()— tidak ada barisCek gudang dijalankankedua di output.
Short-Circuit Evaluation #
Pola output di atas adalah bukti short-circuit: && berhenti pada operand false pertama, dan || berhenti pada operand true pertama. Sifat ini bukan sekadar optimasi kecil — operator && dan || menjamin sisi kanan tidak dievaluasi sama sekali, sehingga kita bisa menulis pemeriksaan berantai yang aman, misalnya indeks < len(daftar) && daftar[indeks] == target: akses daftar[indeks] hanya terjadi setelah panjang daftar dipastikan cukup.
Nilai boolean menjadi bahan bakar struktur kendali if, for, dan switch yang akan kita bahas tuntas pada Section Kendali Alur. Sebelum sampai di sana, kita perlu menguasai kelompok tipe yang jauh lebih beragam: bilangan.
Referensi #
- Spesifikasi Go: Logical operators — tabel kebenaran dan aturan short-circuit.
- Spesifikasi Go: Operators — daftar lengkap operator beserta perbandingan.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
boolean-demo.go
Unduh berkaspackage main
import "fmt"
func cekGudang() bool {
fmt.Println("Cek gudang dijalankan")
return true
}
func main() {
umur := 20
bolehMasuk := umur >= 17
fmt.Println("Boleh masuk:", bolehMasuk)
hargaMahal := true
stokKosong := false
tampilkanDiskon := hargaMahal && !stokKosong
fmt.Println("Tampilkan diskon:", tampilkanDiskon)
fmt.Println("Evaluasi stokKosong || cekGudang():")
adaBarang := stokKosong || cekGudang()
fmt.Println("adaBarang =", adaBarang)
fmt.Println("Evaluasi stokKosong && cekGudang():")
layakJual := stokKosong && cekGudang()
fmt.Println("layakJual =", layakJual)
}