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.