Apa itu Trait?
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 29 dari 61.
Generics memungkinkan kamu menulis kode yang bekerja dengan tipe apa pun, tetapi terkadang kamu perlu memastikan bahwa suatu tipe dapat melakukan sesuatu yang spesifik. Di sinilah trait berperan.
Trait mendefinisikan sekumpulan method yang harus diimplementasikan oleh suatu tipe. Anggap saja sebagai kontrak: tipe apa pun yang "menandatangani" kontrak ini berjanji untuk menyediakan perilaku yang ditentukan. Jika kamu pernah menggunakan interface dalam bahasa lain, trait memiliki fungsi serupa.
Berikut cara mendefinisikan sebuah trait:
trait Describable {
fn describe(&self) -> String;
}
Kata kunci trait memperkenalkan trait, lalu diikuti namanya. Di dalam kurung kurawal, kamu mendeklarasikan signature method, yang hanya terdiri dari nama, parameter, dan tipe kembalian, tanpa body. Titik koma setelah signature menunjukkan bahwa ini adalah persyaratan, bukan implementasi.
Trait Describable ini menyatakan: "Tipe apa pun yang mengimplementasikanku harus menyediakan method describe yang menerima referensi ke dirinya sendiri dan mengembalikan String." Trait ini tidak peduli bagaimana method itu bekerja: hal itu ditentukan oleh setiap tipe yang mengimplementasikannya.
Trait menjadi lebih berguna ketika beberapa tipe berbeda mengimplementasikan trait yang sama. Book, Car, dan Person semuanya dapat mengimplementasikan Describable, masing-masing menyediakan deskripsi uniknya sendiri. Trait menjamin bahwa semuanya memiliki kemampuan umum ini.
Tantangan
MudahMari definisikan trait pertamamu! Sebuah trait menetapkan kontrak: janji bahwa tipe apa pun yang mengimplementasikannya akan menyediakan perilaku tertentu. Kamu akan membuat trait Summarizable yang dapat diimplementasikan oleh berbagai tipe untuk menyediakan ringkasan tentang dirinya sendiri.
Kamu akan menyusun kodemu dalam dua file:
summary.rs: Definisikan trait publik bernamaSummarizabledengan satu signature method:summarize(&self) -> String. Ingat, dalam definisi trait, kamu hanya mendeklarasikan signature method dengan titik koma: tanpa isi. Ini memberi tahu Rust, "tipe apa pun yang mengimplementasikan trait ini harus menyediakan methodsummarizeyang mengembalikanString."main.rs: Sertakan module summary-mu dan cetak pesan yang mengonfirmasi bahwa trait-mu sudah didefinisikan. Karena kita belum mempelajari cara mengimplementasikan trait (itu materi di pelajaran berikutnya!), kamu cukup memastikan trait-mu berhasil dikompilasi.
Di file utama, cetak pesan berikut untuk mengonfirmasi bahwa definisi trait-mu valid:
Summarizable trait defined successfully!Tantangan ini hanya berfokus pada sintaks definisi trait: kata kunci trait, nama trait, dan deklarasi signature method tanpa implementasi. Di pelajaran berikutnya, kamu akan belajar cara membuat struct mengimplementasikan trait ini!
Coba sendiri
mod summary;
fn main() {
// TODO: Cetak pesan konfirmasi bahwa trait sudah didefinisikan
// Output yang diharapkan: "Summarizable trait defined successfully!"
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online