Struct, Enum, and Trait
Catatan kali ini akan membahas 3 serangkai yang sering digunakan dalam bahasa pemrograman rust, yaitu Struct, Enum, dan Trait.
Struct
Secara sederhana struct ini berfungsi untuk mengelompokan data, struct mirip dengan class dibeberapa bahasa pemrograman seperti python, mirip tapi tak sama di rust struct tidak memiliki fitur inheritance. Gaya penulisan nama struct diawali dengan huruf besar, berikut beberapa “jenis” struct :
Classic / Named
Jenis ini yang paling umum digunakan, menuliskan nama field dan diikuti dengan tipe datanya, contoh :
struct User {
username: String,
email: String,
status: bool,
}
penggunaannya :
fn main () {
let user_1 = User {
username: String::from("nester"),
email: String::from("nestero@mail.com"),
status: true,
};
println!("Username 1 : {}" ,user_1.username)
}
Tuple
Jenis ini tidak menuliskan nama field, tetapi langsung ke tipe datanya (berbentuk tuple), contoh :
struct Warna(i32, i32, i32) // Format RGB
penggunaanya :
fn main () {
let black = Warna(0, 0, 0);
// Akses menggunakan indeks
println!("Nilai Red: {}", black.0);
}
Unit
Jenis struct ini sama sekali tidak memiliki nama field ataupun tipe data, contoh :
struct UserLogout;
penggunaannya :
fn process_event(_event: UserLogout) {
println!("User telah logout.");
}
fn main() {
// Membuat instance
let event = UserLogout;
// Unit struct sering dipakai sebagai penanda (marker)
process_event(event);
}
Enum
Fungsi enum pada rust adalah untuk mendefinisikan tipe data yang bisa menjadi salah satu dari beberapa varian yang mungkin. Jika Struct berfungsi untuk mengelompokan atau menggabungkan data (Logika AND), maka Enum digunakan untuk memilih satu data dari beberapa pilihan (Logika OR). Contoh penulisan dan penggunaan enum :
enum StatusPesanan {
// Varian tanpa data
MenungguPembayaran,
// Varian dengan data String
Dikirim(String),
// Varian dengan struct
Diterima { tanggal: String, penerima: String },
}
fn cek_status(status: StatusPesanan) {
match status {
StatusPesanan::MenungguPembayaran => {
println!("Silahkan melakukan pembayaran terlebih dahulu");
},
StatusPesanan::Dikirim (resi)=> {
println!("Barang sedang jalan. Resi: {}", resi);
},
StatusPesanan::Diterima { tanggal, penerima } => {
println!("Diterima oleh {} pada tanggal {}", penerima, tanggal);
},
}
}
penggunaannya :
fn main() {
let pesanan_saya = StatusPesanan::Dikirim(String::from("JNE-12345"));
cek_status(pesanan_saya);
}
Trait
Jika Struct mendefinisikan data, dan Enum mendefinisikan varian, maka Trait mendefinisikan behavior atau kemampuan yang dimiliki oleh suatu tipe data. Contoh mendefinisikan trait :
trait Bersuara {
fn suara(&self) -> String;
}
Implementasi
Misalkan kita punya dua struct berbeda, Kucing dan Anjing. Keduanya adalah hewan yang bisa bersuara, tetapi suaranya berbeda. Kita bisa menerapkan trait Bersuara ke keduanya.
// Unit Struct sebagai contoh
struct Kucing;
struct Anjing;
// Implementasi trait untuk Kucing
impl Bersuara for Kucing {
fn suara(&self) -> String {
String::from("Meong!")
}
}
// Implementasi trait untuk Anjing
impl Bersuara for Anjing {
fn suara(&self) -> String {
String::from("Guk Guk!")
}
}
penggunaanya :
fn main() {
let oyen = Kucing;
let doggy = Anjing;
println!("Kucing bilang: {}", oyen.suara());
println!("Anjing bilang: {}", doggy.suara());
}
"Sesungguhnya yang menyebabkan ilmu hilang adalah lupa dan tidak mengulanginya."
Imam Az-Zuhri rahimahullah
Tags:
Referensi:
- https://dasarpemrogramanrust.novalagung.com/basic/struct
- https://doc.rust-lang.org/beta/book/ch18-02-trait-objects.html
Catatan Terkait:

Copyright 2025. All rights reserved.