Lewati ke konten

If...Else di Rust

if membuat program kamu bisa mengambil keputusan: menjalankan satu blok kode atau blok lainnya, tergantung pada sebuah kondisi.

fn main() {
let age = 20;
if age >= 18 {
println!("Kamu boleh ikut pemilu");
}
}
▶ Coba sendiri

Ada beberapa hal yang perlu diperhatikan, karena sering menjebak orang yang datang dari bahasa lain:

  • Kondisinya tidak perlu diapit tanda kurung: if age >= 18, bukan if (age >= 18).
  • Kondisinya harus benar-benar bool. if age (sebuah angka) tidak akan bisa dikompilasi. Kamu perlu menulis if age != 0 atau yang semacamnya.
fn main() {
let age = 15;
if age >= 18 {
println!("Kamu boleh ikut pemilu");
} else {
println!("Umurmu belum cukup");
}
}
▶ Coba sendiri
fn main() {
let score = 72;
if score >= 90 {
println!("Nilai: A");
} else if score >= 75 {
println!("Nilai: B");
} else if score >= 60 {
println!("Nilai: C");
} else {
println!("Nilai: F");
}
}
▶ Coba sendiri

Rust mengecek setiap kondisi dari atas ke bawah dan menjalankan kondisi pertama yang cocok, persis seperti yang kamu harapkan.

Ini sesuatu yang bisa dilakukan Rust tapi tidak bisa dilakukan banyak bahasa lain: if bisa menghasilkan nilai. Artinya, kamu bisa memakainya di sisi kanan sebuah let:

fn main() {
let age = 20;
let status = if age >= 18 { "dewasa" } else { "di bawah umur" };
println!("{status}");
}
▶ Coba sendiri

Cara kerjanya sama seperti mengembalikan nilai dari sebuah fungsi: tidak ada titik koma setelah nilai di setiap cabang. Satu syaratnya: kedua cabang harus menghasilkan tipe yang sama (di sini, keduanya &str).

Kamu bisa menaruh if di dalam if lain. Itu bisa jalan, tapi kalau sudah dua atau tiga tingkat, kodenya jadi susah dibaca. Sering kali kamu bisa menggabungkan kondisinya dengan operator logika && (dan) dan || (atau):

fn main() {
let temperature = 22;
let is_raining = false;
// Bersarang: bisa jalan, tapi makin menjorok ke kanan
if temperature > 15 {
if !is_raining {
println!("Bersarang: ayo jalan-jalan");
}
}
// Pengecekan yang sama dalam satu kondisi
if temperature > 15 && !is_raining {
println!("Digabung: ayo jalan-jalan");
}
// || bernilai true kalau salah satu sisinya true
if temperature < 0 || temperature > 35 {
println!("Tetap di dalam rumah");
} else {
println!("Cuacanya bagus");
}
}

Output:

Bersarang: ayo jalan-jalan
Digabung: ayo jalan-jalan
Cuacanya bagus
▶ Coba sendiri

if bersarang tetap masuk akal kalau blok di dalamnya melakukan sesuatu yang lain, atau kalau blok itu punya else sendiri. Tapi kalau satu-satunya tugas if luar adalah menjaga if di dalamnya, && menyampaikan hal yang sama dengan lebih sederhana. Untuk mengecek apakah sebuah angka ada di dalam rentang, tulis temperature >= 15 && temperature <= 25. Rust tidak membolehkan 15 <= temperature <= 25.

Simpan sebuah angka n = 7. Pakai if sebagai ekspresi untuk mengisi variabel kind dengan "genap" atau "ganjil", lalu tampilkan 7 adalah ganjil. Petunjuk: sebuah angka genap kalau n % 2 == 0.

Lihat solusi
fn main() {
let n = 7;
let kind = if n % 2 == 0 { "genap" } else { "ganjil" };
println!("{n} adalah {kind}");
}

Output:

7 adalah ganjil
▶ Coba sendiri

Sebuah bioskop memasang harga 5 dolar untuk anak di bawah 12 tahun, 7 untuk orang berumur 65 tahun ke atas, dan 12 untuk yang lainnya. Simpan age bernilai 70, hitung price dengan satu ekspresi if / else if / else, lalu tampilkan Tiket: $7. Petunjuk: setiap cabang harus menghasilkan angka, dan seluruh if diakhiri titik koma setelah } yang terakhir.

Lihat solusi
fn main() {
let age = 70;
let price = if age < 12 {
5
} else if age >= 65 {
7
} else {
12
};
println!("Tiket: ${price}");
}

Output:

Tiket: $7
▶ Coba sendiri
  • if kondisi { ... }: tidak perlu tanda kurung, dan kondisinya harus berupa bool.
  • Tambahkan pengecekan lain dengan else if, dan sediakan cabang cadangan dengan else.
  • Gabungkan kondisi dengan && dan || alih-alih menaruh if di dalam if.
  • if bisa dipakai sebagai ekspresi untuk menghasilkan nilai. Tipe kedua cabangnya harus sama, dan kamu wajib menulis else.

Kuis singkat

1. Mana yang wajib untuk kondisi if di Rust?

2. Saat memakai if sebagai ekspresi dengan let, apa syarat untuk kedua cabangnya?

Skor: 0 / 2