Enum & Pattern Matching

Enum

Enum adalah fitur yang disediakan untuk membuat beberapa opsi pilihan berdasarkan varian yang ada. Untuk mendefinisikan enum cukup menggunakan keyword enum seperti dibawah ini.

enum IpAddress {
V4,
V6
}

Perbedaan yang mendasari antara enum dengan struct yaitu, enum dapat menyimpan data dengan variasi tipe data berbeda. Untuk mengakses nilai enum bisa dengan cara seperti ini.

let IpV4 = IpAddress::V4;

Untuk penggunaan enum biasanya cocok dipadukan dengan pattern matching atau pola yang cocok jika diterjemahkan ke bahasa indonesia.

Pattern Matching

Rust punya control flow operator yang cukup powerful, yakni dikenal dengan “match” fitur ini bisa digunakan untuk membaca nilai pada sebuah opsi enum dan mengembalikan nilai yang ada berdasarkan kecocokan, untuk lebih lengkapnya berikut adalah contoh kodenya.

#[derive(Debug)]
enum IpAddress {
V4,
V6
}
fn ip_print(ip_address: IpAddress) -> i32 {
match ip_address {
IpAddress::V4 => 1,
IpAddress::V6 => 2,
_ => 0
}
}
fn main() {
println!("{:?} {:?}", ip_print(IpAddress::V4), ip_print(IpAddress::V6));
}

Kode diatas terlihat sebuah enum IpAddress dan juga sebuah function is_print(ip_address: IpAddress) yang tujuannya untuk mencetak nilai enum dengan sebuah parameter yang diinputkan, jika nilai nya cocok dengan opsi yang ada maka akan dikembalikan nilainya.