Enum adalah type data custom. Berikut syntax untuk membuat enum:
enum NamaEnum {
EnumVariants1,
EnumVariants2,
...,
}
Contoh, kita akan membuat enum untuk posisi player hockey
enum HockeyPosition { Center, Wing, Defense, Goalie, }
Berikut contoh penggunaan enum baik sebagai parameter pada function atau mengakses enum variants.
enum HockeyPosition{ Center, Wing, Defense, Goalie, } fn next_player(pos : HockeyPosition){ //code goes here } fn main() { let pos = HockeyPosition::Defense; next_player(pos); }
Setiap Enum Variants dapat menyimpan data tambahan, berikut contohnya
enum Clock {
Sundial(u8),
Digital(u8, u8),
Analog(u8, u8, u8),
}
enum Clock diatas menyimpan tipe jam matahari yang hanya membutuhkan nilai jam, jam digitial yang dapat menyimpan jam dan menit, serta analog yang dapat menyimpan nilai jam, menit dan detik.
Berikut contoh menggunakan enum dalam block match
enum Clock { Sundial(u8), Digital(u8, u8), Analog(u8, u8, u8), } fn tell_time(clock : Clock){ match clock{ Clock::Sundial(hours) => println!("Jam {}", hours), Clock::Analog(hours, minutes, seconds) =>{ println!("Jam {}, menit {}, detik {}", hours, minutes, seconds); }, Clock::Digital(hours, minutes) => println!("Jam {}, menit {}", hours, minutes), } } fn main() { tell_time(Clock::Sundial(4)); tell_time(Clock::Digital(4, 4)); tell_time(Clock::Analog(4, 4, 4)); }
Jam 4
Jam 4, menit 4
Jam 4, menit 4, detik 4
Enums diatas dapat kita tuliskan lebih jelas dengan mendefinisikan field. Perhatikan, karena kita menambahkan field pada enums, maka perlu digunakan curly brackets.
enum Clock { Sundial {hours:u8}, Digital {hours:u8, minutes:u8}, Analog {hours:u8, minutes:u8, seconds:u8}, } fn main() { let clock = Clock::Analog { hours: 4, minutes: 4, seconds: 4, }; }