Structs mirip dengan tuples, dimana dapat menyimpan multiple values dan memiliki tipe data berbeda. Perbedaannya, pada struct kita harus memberi nama field dari data.
Berikut syntax mendefinisikan struct
struct NamaStruct {
property1 : dataType1,
property2 : dataType2,
...
}
Menggunakan contoh Hockey dari modul enums, kita akan membuat struct HockeyPlayer.
enum HockeyPosition {
Center,
Wing,
Defense,
Goalie,
}
struct HockeyPlayer {
name: String,
number: u8,
position: HockeyPosition,
goals_ytd: u8,
}
Berikut contoh penggunaanya
#[allow(dead_code)] enum HockeyPosition { Center, Wing, Defense, Goalie, } struct HockeyPlayer { name: String, number: u8, position: HockeyPosition, goals_ytd: u8, } fn main() { let player = HockeyPlayer { name: String::from("Budi"), number: 44, position: HockeyPosition::Center, goals_ytd: 100 }; println!("{} memiliki jumlah goals {}", player.name, player.goals_ytd) }
Budi memiliki jumlah goals 100
Tuple Struct
Adalah struct yang mirip tuple, dimana tidak digunakan nama field. Contoh:
struct Triangle(u32, u32, u32); fn is_equilateral(triangle : Triangle) -> bool { triangle.0 == triangle.1 && triangle.1 == triangle.2 } fn main(){ let triangle = Triangle(3, 4, 5); println! ("Segita sama sisi ? {}", is_equilateral(triangle)) ; }
Perhatian, jika fungsi is_quilateral menggunakan argumen tuple biasa, akan terjadi error.
struct Triangle(u32, u32, u32); fn is_equilateral(triangle : Triangle) -> bool { triangle.0 == triangle.1 && triangle.1 == triangle.2 } fn main(){ let triangle = Triangle(3, 4, 5); println! ("Segita sama sisi ? {}", is_equilateral(triangle)) ; let nums = (5, 5, 5); println! ("Segita sama sisi ? {}", is_equilateral(nums)) ; }
Compiling rustdasar v0.1.0 (F:\Project\rustdasar\rustdasar)
error[E0308]: mismatched types
--> src\main.rs:40:55
|
40 | println! ("Segita sama sisi ? {}", is_equilateral(nums)) ;
| ^^^^ expected struct `Triangle`, found tuple
|
= note: expected struct `Triangle`
found tuple `({integer}, {integer}, {integer})`
For more information about this error, try `rustc --explain E0308`.
error: could not compile `rustdasar` due to previous error
Unit Struct
Adalah struct tanpa field. Kita dapat menambahkan method kedalam unit struct.
Akan kita bahas lebih mendalam dalam modul method.
struct MyStruct; fn main(){ let s = MyStruct; }