Study
Rust

Result<T, E> & Error Handling di Rust

Penjelasan

Sama seperti tidak punya null, Rust juga TIDAK PUNYA try/catch/exception seperti bahasa lain — error direpresentasikan lewat enum bawaan Result<T, E>, dengan dua varian: Ok(nilai) (berhasil) atau Err(error) (gagal). Operator ? adalah shortcut untuk "kalau Err, langsung return error itu ke pemanggil; kalau Ok, ambil nilainya dan lanjut" — mengurangi banyak boilerplate match berulang.

Contoh Konsep

fn bagi(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        return Err(String::from("Tidak bisa membagi dengan nol."));
    }

    Ok(a / b)
}

fn main() {
    match bagi(10, 0) {
        Ok(hasil) => println!("Hasil: {}", hasil),
        Err(pesan) => println!("Error: {}", pesan),
    }
}

Praktikum

Buat fungsi ambil_elemen(data: &Vec<i32>, index: usize) -> Result<i32, String> yang mengembalikan Err kalau index di luar jangkauan data (cek dengan data.len()), atau Ok(nilai) kalau valid. Panggil dengan index yang sengaja tidak ada, cocokkan hasilnya dengan match, lalu tampilkan pesannya.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Pakai Option<T> kalau yang perlu direpresentasikan cuma "ada atau tidak ada nilai" tanpa alasan kenapa; pakai Result<T, E> kalau kamu perlu menjelaskan KENAPA sebuah operasi gagal lewat tipe E (biasanya String atau custom error type).