Method Bawaan
Nilai bawaan trait
Method Bawaan adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 4 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.
Metode dengan Isi
Metode sifat tidak harus hanya berupa tanda tangan. Sebuah sifat dapat menyediakan implementasi bawaan — isi metode yang otomatis diperoleh oleh penerap.
Ini mengurangi kode berulang di banyak tipe.
Metode Bawaan
Tulis isinya langsung di dalam sifat. Tipe yang menerapkan sifat tersebut mewarisinya secara gratis, tanpa kode tambahan.
trait Greet {
fn hello(&self) -> String {
String::from("Hello there")
}
}
struct Robot;
impl Greet for Robot {}
fn main() {
println!("{}", Robot.hello());
}Menimpa Implementasi Bawaan
Setiap penerap dapat menimpa implementasi bawaan dengan menyediakan versinya sendiri. Penimpaan tersebut menggantikan implementasi bawaan untuk tipe itu.
trait Greet {
fn hello(&self) -> String { String::from("Hello there") }
}
struct Robot;
struct Pirate;
impl Greet for Robot {}
impl Greet for Pirate {
fn hello(&self) -> String { String::from("Arr!") }
}
fn main() {
println!("{}", Robot.hello());
println!("{}", Pirate.hello());
}Implementasi Bawaan yang Memanggil Metode Wajib
Metode bawaan dapat memanggil metode lain dari sifat yang sama, bahkan metode yang tidak memiliki implementasi bawaan. Ini adalah pola yang kuat: penerap menyediakan inti kecil, lalu implementasi bawaan membangun perilaku yang lebih kaya di atasnya.
trait Summary {
fn title(&self) -> String;
fn preview(&self) -> String {
format!("Read more about: {}", self.title())
}
}
struct Article { headline: String }
impl Summary for Article {
fn title(&self) -> String { self.headline.clone() }
}
fn main() {
let a = Article { headline: String::from("Rust Rocks") };
println!("{}", a.preview());
}Pola Metode Templat
Kombinasi metode wajib dan bawaan ini adalah pola metode templat. Sifat menentukan alur keseluruhan melalui implementasi bawaan dan menyisakan bagian yang berubah sebagai metode wajib.
trait Report {
fn body(&self) -> String;
fn render(&self) -> String {
format!("=== REPORT ===\n{}\n==============", self.body())
}
}
struct Sales;
impl Report for Sales {
fn body(&self) -> String { String::from("Sales up 10%") }
}
fn main() {
println!("{}", Sales.render());
}Beberapa Implementasi Bawaan
Sebuah sifat dapat dengan bebas mencampur metode wajib dan metode bawaan. Penerap hanya perlu menyediakan metode yang wajib.
trait Animal {
fn name(&self) -> String;
fn legs(&self) -> u32 { 4 }
fn describe(&self) -> String {
format!("{} has {} legs", self.name(), self.legs())
}
}
struct Dog;
impl Animal for Dog {
fn name(&self) -> String { String::from("Dog") }
}
fn main() {
println!("{}", Dog.describe());
}Implementasi Bawaan dan Sifat Standar
Banyak sifat standar mengandalkan implementasi bawaan. Misalnya, Iterator hanya mewajibkan next; setiap adaptor dan konsumen adalah metode bawaan yang dibangun di atasnya.
Itulah sebabnya satu metode dapat membuka seluruh perangkat tersebut.
Menimpa demi Kinerja
Terkadang implementasi bawaan berfungsi, tetapi versi khusus lebih cepat. Penerap dapat menimpa metode itu saja sambil mempertahankan implementasi bawaan lainnya.
trait Counter {
fn items(&self) -> Vec<i32>;
fn total(&self) -> i32 {
self.items().iter().sum()
}
}
struct Fast { precomputed: i32 }
impl Counter for Fast {
fn items(&self) -> Vec<i32> { vec![] }
fn total(&self) -> i32 { self.precomputed }
}
fn main() {
println!("{}", Fast { precomputed: 99 }.total());
}Menjaga Sifat Tetap Ergonomis
Desain sifat yang baik: wajibkan sekumpulan kecil metode dan sediakan implementasi bawaan yang praktis untuk sisanya. Penerap hanya melakukan pekerjaan minimal, tetapi memperoleh antarmuka yang kaya.
Catatan Penting
Metode bawaan hanya dapat menggunakan metode sifat lain dan tipe di balik self melalui metode-metode tersebut; metode ini tidak dapat mengakses bidang penerap yang tidak diketahui secara langsung. Rancang implementasi bawaan berdasarkan metode milik sifat itu sendiri.
Implementasi Bawaan vs Wajib secara Singkat
Metode sifat yang memiliki isi adalah bawaan; metode yang hanya memiliki tanda tangan adalah wajib. Penerap harus menyediakan setiap metode wajib, tetapi boleh membiarkan implementasi bawaan tanpa perubahan.
trait Logger {
fn line(&self) -> String;
fn log(&self) {
println!("LOG: {}", self.line());
}
}
struct App;
impl Logger for App {
fn line(&self) -> String { String::from("started") }
}
fn main() {
App.log();
}Pemeriksaan Singkat
Uji pemahaman Anda tentang metode bawaan.
Rangkuman
Anda telah mempelajari implementasi bawaan sifat:
- Metode sifat dapat menyertakan isi sebagai implementasi bawaan
- Penerap mewarisinya secara gratis dan dapat menimpanya
- Implementasi bawaan dapat memanggil metode wajib, sehingga memungkinkan pola metode templat
- Hal ini menjaga sifat tetap ergonomis dengan sedikit metode wajib
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Method Bawaan” gratis?
Ya — teks lengkap “Method Bawaan” 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 “Method Bawaan”?
Nilai bawaan trait 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 4 dari 4.
Berapa lama pelajaran “Method Bawaan” 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.