Enum di Rust — Rust

Enum di Rust Enum di Rust jauh lebih powerful daripada enum di kebanyakan bahasa lain — setiap variant bisa menyimpan data! Enum Sederhana #[derive(Debug)] enum

Enum di Rust

Enum di Rust jauh lebih powerful daripada enum di kebanyakan bahasa lain — setiap variant bisa menyimpan data!

Enum Sederhana

#[derive(Debug)]
enum Direction {
    Up,
    Down,
    Left,
    Right,
}

fn main() {
    let d = Direction::Up;
    println!("{:?}", d);  // Up
}

Enum dengan Data

#[derive(Debug)]
enum Shape {
    Circle(f64),                    // radius
    Rectangle(f64, f64),            // width, height
    Triangle { base: f64, height: f64 }, // named fields
}

fn area(shape: &Shape) -> f64 {
    match shape {
        Shape::Circle(r) => 3.14159 * r * r,
        Shape::Rectangle(w, h) => w * h,
        Shape::Triangle { base, height } => 0.5 * base * height,
    }
}

fn main() {
    let shapes = vec![
        Shape::Circle(5.0),
        Shape::Rectangle(4.0, 6.0),
        Shape::Triangle { base: 3.0, height: 8.0 },
    ];
    for s in &shapes {
        println!("{:?} → luas: {:.2}", s, area(s));
    }
}

impl pada Enum

enum Pesan {
    Quit,
    Teks(String),
    Pindah { x: i32, y: i32 },
}

impl Pesan {
    fn proses(&self) {
        match self {
            Pesan::Quit => println!("Keluar"),
            Pesan::Teks(t) => println!("Pesan: {}", t),
            Pesan::Pindah { x, y } => println!("Pindah ke ({}, {})", x, y),
        }
    }
}

Option & Result — Enum Bawaan Rust

Dua enum paling penting di Rust:

// Option<T> — mungkin ada, mungkin tidak (pengganti null)
enum Option<T> {
    Some(T),
    None,
}

// Result<T, E> — sukses atau error
enum Result<T, E> {
    Ok(T),
    Err(E),
}

Kita akan bahas Option dan Result lebih detail di lesson berikutnya.

Yang akan kamu pelajari