Enum & Pattern Matching di Rust
Penjelasan
Enum di Rust jauh lebih kuat dibanding enum di kebanyakan bahasa lain — tiap varian enum bisa membawa data-nya sendiri. match dipakai untuk mencocokkan nilai enum (atau tipe data lain) dengan pola tertentu, dan Rust MEWAJIBKAN semua kemungkinan varian ditangani (exhaustive) — kalau ada varian yang lupa ditangani, compiler akan error, bukan diam-diam ter-skip seperti switch di bahasa lain.
Contoh Konsep
enum StatusPesanan {
Diproses,
Dikirim(String), // varian ini membawa data: nomor resi
Selesai,
}
fn cek_status(status: StatusPesanan) -> String {
match status {
StatusPesanan::Diproses => String::from("Pesanan sedang diproses"),
StatusPesanan::Dikirim(resi) => format!("Dikirim, resi: {}", resi),
StatusPesanan::Selesai => String::from("Pesanan selesai"),
}
}
fn main() {
let status = StatusPesanan::Dikirim(String::from("JX12345"));
println!("{}", cek_status(status));
}
Praktikum
Buat enum Nilai dengan tiga varian: A, B, dan C (tanpa data). Buat fungsi keterangan(nilai: Nilai) -> String yang memakai match untuk mengembalikan "Sangat baik" (A), "Baik" (B), atau "Cukup" (C). Panggil dengan salah satu variannya dan tampilkan hasilnya.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Kalau kamu sengaja hanya ingin menangani sebagian varian dan mengabaikan sisanya, tambahkan cabang _ => ... di akhir match sebagai catch-all — tanpa ini, Rust akan menolak mengompilasi kode yang tidak menangani SEMUA kemungkinan varian.