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;
}