Menggunakan Struct Pada Rust

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

Sharing is caring:

Leave a Comment