0Pricing
Learn Rust Coding · Pelajaran

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.

Semua pelajaran dalam kursus ini

  1. Mendefinisikan Trait
  2. Objek Trait dan dyn
  3. Dispatch Statis vs Dinamis
  4. Method Bawaan
← Kembali ke Learn Rust Coding