Struct

Struct

Struct atau pendek kata dari structure biasanya digunakan untuk custom tipe data, struct sedikit mirip tipe data object. Dengan menggunakan struct kita bisa menulis kode dengan paradigma Object Oriented Programing (OOP).

Contoh Tipe Data Struct

Untuk inisialisasi tipe data struct bisa menggunakan keyword struct dan kemudian nama tipe datanya.

struct People {
name: String,
age: i32,
}

Berikut adalah contoh penggunaan struct, dengan menyimpan struct People {} kedalam sebuah variabel p.

struct People {
name: String,
age: i32,
}
fn main() {
let p = People {
name: "Adiatma".to_string(),
age: 22,
};
println!("Hy {}, {}", p.name, p.age); // Adiatma 22
}

Pada kode diatas terlihat struct People di inisialisasi dan kemudian diisi dengan dua tipe data yaitu String dan signed integer 32 bit atau i32. Nah kemudian di dalam function main terdapat sebuah variabel yang mereferensi ke struct People dan menambahkan nilai berdasarkan tipe data pada struct People, dan di akhir baris kode variabel p telah memiliki tipe data dan nilai dari struct People sehingga dapat dibaca dengan menggunakan dot notation untuk mencetak secara spesifik nilai dari struct tersebut.

Method

Method secara syntax terlihat mirip seperti function, diinisiasi dengan menggunakan keyword fn dan kemudian di depannya ada nama method. Hal yang membedakan terletak pada konteksnya. Method berada di dalam konteks struct, seperti contoh dibawah ini.

struct People {
first_name: String,
last_name: String
}
impl People {
fn get_fullname(&self) -> String {
format!("{} {}", self.first_name, self.last_name)
}
}
fn main() {
let p = People {
first_name: "Adiatma".to_string(),
last_name: "Kamarudin".to_string(),
};
println!("{}", p.get_fullname()) // "Adiatma Kamarudin"
}

Block impl pada contoh di atas mendeskripsikan konteks pada struct. Kemudian function yang direferensikan ke konteks disisipkan di dalam block impl.

Method dengan lebih dari satu parameter

Syntax Self pada method akan mereferensi ke struct People, atau konteksnya sendiri, sehingga bisa mengakses nilai-nilai yang ada pada People.

impl People {
fn add_new_identity(&self, other: String) -> String {
format!("{} {} {}", self.first_name, self.last_name, other)
}
}

Associated Functions

Block impl dapat digunakan tanpa memanfaatkan syntax self sebagai parameter method. Konsep ini dinamakan associated functions. Associated functions merupakan function yang diasosiasikan dengan struct namun bukan merupakan method struct. Associated functions digunakan untuk constructor yang akan mengembalikan instance baru dari sebuah struct. Adapun contoh implementasi associated functions untuk struct seperti berikut.

impl People {
fn count_income(d: i32, i: i32) -> People {
People {
days: d,
income: i
}
}
}

Untuk memanggil kembali associated functions yang telah dibuat dapat menerapkan syntax :: seperti People::count_income(30, 3000). Adapun salah satu contoh menampilkan pemanggilan associated functions adalah sebagai berikut.

fn main() {
let show = People::count_income(30, 3000);
println!("{:#?}", show);
}