Mendefinisikan Trait
Perilaku bersama
Mendefinisikan Trait adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa Itu Trait?
Trait mendefinisikan perilaku bersama—sekumpulan metode yang dapat diimplementasikan oleh suatu tipe. Trait mirip dengan antarmuka dalam bahasa lain.
Trait memungkinkan berbagai tipe menyepakati kontrak umum.
Mendeklarasikan Trait
Gunakan kata kunci trait yang diikuti tanda tangan metode. Tanda tangan tersebut mendeklarasikan hal-hal yang harus disediakan oleh pengimplementasi.
trait Greet {
fn hello(&self) -> String;
}
fn main() {
println!("trait declared");
}Mengimplementasikan Trait
Gunakan impl TraitName for Type untuk menyediakan metode. Tanda tangannya harus sama persis dengan trait.
trait Greet {
fn hello(&self) -> String;
}
struct Dog;
impl Greet for Dog {
fn hello(&self) -> String {
String::from("Woof")
}
}
fn main() {
let d = Dog;
println!("{}", d.hello());
}Banyak Tipe, Satu Trait
Berbagai tipe dapat mengimplementasikan trait yang sama, masing-masing dengan caranya sendiri. Inilah cara trait menyatukan perilaku pada tipe-tipe yang tidak saling berkaitan.
trait Greet { fn hello(&self) -> String; }
struct Dog;
struct Cat;
impl Greet for Dog { fn hello(&self) -> String { String::from("Woof") } }
impl Greet for Cat { fn hello(&self) -> String { String::from("Meow") } }
fn main() {
println!("{}", Dog.hello());
println!("{}", Cat.hello());
}Trait sebagai Parameter Fungsi
Sintaks impl Trait menerima tipe apa pun yang mengimplementasikan trait tersebut. Fungsi dapat bekerja secara seragam tanpa mengetahui tipe konkretnya.
trait Greet { fn hello(&self) -> String; }
struct Dog;
impl Greet for Dog { fn hello(&self) -> String { String::from("Woof") } }
fn announce(g: &impl Greet) {
println!("It says: {}", g.hello());
}
fn main() {
announce(&Dog);
}Batas Trait pada Generik
Anda dapat mewajibkan tipe generik mengimplementasikan sebuah trait menggunakan batas trait. Ini membuka akses ke metode trait tersebut di dalam fungsi.
trait Greet { fn hello(&self) -> String; }
struct Cat;
impl Greet for Cat { fn hello(&self) -> String { String::from("Meow") } }
fn shout<T: Greet>(g: &T) {
println!("{}!", g.hello().to_uppercase());
}
fn main() {
shout(&Cat);
}Beberapa Batas dengan +
Wajibkan beberapa trait sekaligus dengan +. Di sini, sebuah nilai harus mengimplementasikan trait khusus dan Clone standar.
trait Named { fn name(&self) -> String; }
#[derive(Clone)]
struct Item { label: String }
impl Named for Item {
fn name(&self) -> String { self.label.clone() }
}
fn describe<T: Named + Clone>(t: &T) {
let copy = t.clone();
println!("named {}", copy.name());
}
fn main() {
describe(&Item { label: String::from("box") });
}Klausa where
Untuk banyak batas, klausa where membuat tanda tangan tetap mudah dibaca dengan memindahkan batasan ke bawahnya.
use std::fmt::Debug;
fn print_all<T>(items: &[T])
where
T: Debug,
{
for it in items {
println!("{:?}", it);
}
}
fn main() {
print_all(&[1, 2, 3]);
}Trait Dapat Memiliki Beberapa Metode
Sebuah trait dapat mendeklarasikan banyak metode. Pengimplementasi harus menyediakan semua metode yang diwajibkan, sehingga tipe tersebut memiliki serangkaian perilaku yang lengkap.
trait Shape {
fn area(&self) -> f64;
fn name(&self) -> String;
}
struct Square { side: f64 }
impl Shape for Square {
fn area(&self) -> f64 { self.side * self.side }
fn name(&self) -> String { String::from("square") }
}
fn main() {
let s = Square { side: 3.0 };
println!("{} area {}", s.name(), s.area());
}Mengapa Trait Penting
Trait memungkinkan polimorfisme tanpa pewarisan. Trait mendukung generik, pembebanan operator (Add), pemformatan (Display), dan sebagian besar pustaka standar.
Trait merupakan inti model abstraksi Rust.
Aturan Koherensi
Aturan yatim menyatakan bahwa Anda hanya dapat mengimplementasikan trait untuk suatu tipe jika Anda memiliki trait atau tipe tersebut. Ini mencegah implementasi yang bertentangan antar-crate.
Pemeriksaan Singkat
Uji pemahaman Anda tentang trait.
Rangkuman
Anda telah mempelajari cara mendefinisikan dan menggunakan trait:
traitmendeklarasikan perilaku bersamaimpl Trait for Typemenyediakan metode- Batas trait (
T: Trait,+,where) membatasi generik - Aturan yatim menjaga implementasi tetap koheren
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendefinisikan Trait” gratis?
Ya — teks lengkap “Mendefinisikan Trait” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mendefinisikan Trait”?
Perilaku bersama Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?
Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mendefinisikan Trait” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?
Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendefinisikan Trait
- Objek Trait dan dyn
- Dispatch Statis vs Dinamis
- Method Bawaan