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