Study
Rust

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.

Editor Latihan

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.