Trait di Rust
Penjelasan
Trait di Rust setara dengan interface di bahasa lain — mendefinisikan kumpulan method yang WAJIB diimplementasikan oleh tipe data yang menerapkannya lewat impl NamaTrait for NamaTipe. Beda dari interface implisit Go, trait di Rust harus diimplementasikan secara eksplisit.
Contoh Konsep
trait Bentuk {
fn hitung_luas(&self) -> f64;
}
struct Lingkaran {
jari_jari: f64,
}
impl Bentuk for Lingkaran {
fn hitung_luas(&self) -> f64 {
3.14 * self.jari_jari * self.jari_jari
}
}
fn main() {
let lingkaranku = Lingkaran { jari_jari: 7.0 };
println!("{}", lingkaranku.hitung_luas());
}
Praktikum
Buat trait Hewan dengan method bersuara(&self) -> String. Buat struct Kucing (tanpa field), implementasikan trait Hewan untuknya, method bersuara()-nya mengembalikan "Meong". Buat instance Kucing di main() dan tampilkan hasil bersuara().
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Trait bisa dipakai sebagai parameter fungsi (mis. fn tampilkan(b: &impl Bentuk)) supaya fungsi itu bisa menerima TIPE APA PUN yang mengimplementasikan trait tersebut — pola ini sering disebut "trait bound", dan jadi cara utama Rust mencapai polymorphism tanpa inheritance class.