0Pricing
Learn Rust Coding · Pelajaran

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:

  • trait mendeklarasikan perilaku bersama
  • impl Trait for Type menyediakan 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

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