Boolean di Rust
Boolean adalah tipe paling sederhana yang ada: nilainya hanya bisa true (benar) atau false (salah). Di Rust, tipe ini bernama bool, dan kamu akan memakainya setiap kali kode kamu perlu mengambil keputusan.
Mendeklarasikan boolean
Section titled “Mendeklarasikan boolean”fn main() { let is_active = true; let has_error: bool = false; println!("aktif: {is_active}, error: {has_error}");}Rust hampir selalu bisa menebak sendiri bahwa sebuah nilai bertipe bool dari true/false, jadi kamu jarang perlu menuliskan tipenya.
Boolean biasanya berasal dari perbandingan
Section titled “Boolean biasanya berasal dari perbandingan”Di kode sungguhan, kamu jarang menulis true atau false secara langsung. Biasanya nilai itu muncul dari hasil membandingkan sesuatu:
fn main() { let age = 20; let can_vote = age >= 18; println!("Boleh memilih: {can_vote}");}Output:
Boleh memilih: trueMemakai boolean di kondisi
Section titled “Memakai boolean di kondisi”Tugas utama sebuah bool adalah menentukan cabang if mana yang dijalankan:
fn main() { let is_raining = true;
if is_raining { println!("Bawa payung"); } else { println!("Tinggalkan saja di rumah"); }}Kita akan membahas if secara lengkap di halaman If…Else. Ini baru sekilas untuk menunjukkan kenapa boolean itu penting.
Menggabungkan boolean dan short-circuit
Section titled “Menggabungkan boolean dan short-circuit”Kamu sudah bertemu && (dan), || (atau), dan ! (bukan) di halaman Operator. Ada satu hal lagi yang perlu kamu tahu: operator ini berhenti lebih awal begitu jawabannya sudah pasti. Ini disebut short-circuit evaluation (evaluasi hubung-singkat).
- Pada
a && b, kalauabernilaifalse, hasil keseluruhannya pastifalse, jadi Rust tidak pernah melihatb. - Pada
a || b, kalauabernilaitrue, hasil keseluruhannya pastitrue, jadi Rust tidak pernah melihatb.
Ini bukan sekadar trik supaya lebih cepat. Dengan cara ini, sisi kiri bisa melindungi sisi kanan:
fn main() { let count = 0; let total = 50;
// count bernilai 0, jadi Rust berhenti setelah `count != 0` dan tidak pernah membagi. let big_average = count != 0 && total / count > 10; println!("rata-rata besar: {big_average}");
let is_weekend = true; let has_homework = true; // is_weekend bernilai true, jadi `!has_homework` tidak pernah dicek. let can_relax = is_weekend || !has_homework; println!("bisa santai: {can_relax}");}Output:
rata-rata besar: falsebisa santai: trueMembagi dengan nol akan membuat program crash. Karena count != 0 ada di depan dan bernilai false, pembagiannya tidak pernah dijalankan. Kalau kedua sisinya kamu tukar (total / count > 10 && count != 0), pembagian akan jalan lebih dulu. Di contoh ini, compiler bahkan langsung menyadarinya dan menolak untuk build (“this operation will panic at runtime”, artinya operasi ini akan panic saat program berjalan). Kalau nilainya baru diketahui saat program berjalan, programnya akan crash. Jadi, taruh “pengecekan keamanan” di sebelah kiri.
Latihan
Section titled “Latihan”1. Boleh naik wahana?
Section titled “1. Boleh naik wahana?”Sebuah wahana di taman hiburan membolehkan kamu naik kalau tinggimu minimal 120 cm, atau kalau umurmu minimal 8 tahun dan naik bersama orang dewasa. Simpan tinggi 115, umur 9, dan with_adult = true, lalu tampilkan apakah anak ini boleh naik. Petunjuk: pakai tanda kurung untuk mengelompokkan bagian “umur dan orang dewasa”.
Lihat solusi
fn main() { let height_cm = 115; let age = 9; let with_adult = true;
let tall_enough = height_cm >= 120; let can_ride = tall_enough || (age >= 8 && with_adult);
println!("cukup tinggi: {tall_enough}"); println!("boleh naik: {can_ride}");}Output:
cukup tinggi: falseboleh naik: true2. Tahun kabisat
Section titled “2. Tahun kabisat”Sebuah tahun adalah tahun kabisat kalau habis dibagi 4 tapi tidak habis dibagi 100, atau kalau habis dibagi 400. Hitung boolean is_leap untuk tahun 2024, tampilkan, lalu lakukan hal yang sama untuk 1900. Petunjuk: “habis dibagi 4” ditulis year % 4 == 0, dan kamu bisa melakukan shadowing pada year dan is_leap dengan let kedua.
Lihat solusi
fn main() { let year = 2024; let is_leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; println!("{year} tahun kabisat: {is_leap}");
let year = 1900; let is_leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; println!("{year} tahun kabisat: {is_leap}");}Output:
2024 tahun kabisat: true1900 tahun kabisat: falseRingkasan
Section titled “Ringkasan”boolhanya punya dua nilai:trueataufalse.- Perbandingan (
==,<,>=, …) menghasilkan boolean. - Kondisi di
ifharus benar-benarbool. Tidak ada konversi otomatis dari angka atau string. &&dan||melakukan short-circuit: sisi kanan dilewati begitu jawabannya sudah pasti, jadi taruh pengecekan keamanan di sebelah kiri.
Kuis singkat
Section titled “Kuis singkat”Kuis singkat
1. Tipe apa yang dihasilkan oleh perbandingan seperti age >= 18?
2. Di Rust, bisakah kamu memakai bilangan bulat seperti 0 langsung sebagai kondisi if, seperti di beberapa bahasa lain?
3. Pada count != 0 && total / count > 10, apa yang terjadi kalau count bernilai 0?
Skor: 0 / 3
Bacaan lebih lanjut
Section titled “Bacaan lebih lanjut”- The Boolean Type — The Rust Book (bahasa Inggris): pengenalan singkat resmi tentang
bool, bersama tipe-tipe dasar lainnya. bool— dokumentasi standard library (bahasa Inggris): semua method milikbool, sepertithendanthen_some, untuk saat kamu sudah siap.- Lazy boolean operators — The Rust Reference (bahasa Inggris): aturan persis bagaimana
&&dan||melewati sisi kanannya. - Primitives — Rust by Example (bahasa Inggris):
boolbersama tipe bawaan Rust lainnya, dengan contoh yang bisa langsung dijalankan.