Trait Display
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 36 dari 61.
Meskipun Debug sangat berguna bagi developer untuk memeriksa data, trait Display dirancang untuk output yang ditampilkan kepada pengguna. Trait ini yang mengaktifkan pemformat {} di println!. Tidak seperti Debug, Rust tidak dapat menurunkan implementasi Display secara otomatis. Kamu harus mengimplementasikannya secara manual.
Untuk mengimplementasikan Display, kamu perlu menyertakan module fmt dan mengimplementasikan method fmt:
use std::fmt;
struct Temperature {
celsius: f64,
}
impl fmt::Display for Temperature {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}°C", self.celsius)
}
}
method fmt menerima Formatter dan mengembalikan fmt::Result. Kamu menggunakan makro write! untuk memformat output-mu, dengan mengakses field struct melalui self.
Sekarang kamu dapat mencetak struct dengan formatter standar {}:
let temp = Temperature { celsius: 23.5 };
println!("{}", temp); // 23.5°C
Perbedaan utamanya: output Debug menampilkan struktur datamu (berguna untuk debug), sedangkan output Display lebih rapi dan ditujukan untuk pengguna akhir. Sebuah struct dapat mengimplementasikan keduanya: gunakan {:?} untuk debug dan {} untuk output yang rapi.
Tantangan
MudahMari buat sistem tampilan produk yang mudah digunakan! Sementara Debug menampilkan struktur mentah datamu, trait Display memungkinkan kamu membuat output yang rapi dan mudah dibaca, cocok untuk pengguna akhir.
Kamu akan mengatur kodemu dalam dua file:
product.rs: Definisikan structProductpublik dengan dua field publik:name(String) danprice(f64). Implementasikan traitDisplayuntuk struct-mu agar formatnya menjadi{name} - ${price}. Ingat untuk menggunakanstd::fmtdan makrowrite!di dalam methodfmt.main.rs: Gunakan module product-mu dan buat instanceProductmenggunakan input yang diberikan. Cetak produk menggunakan formatter standar{}untuk menampilkan output khususmu.
Trait Display mengharuskan kamu mengimplementasikan method fmt secara manual: Rust tidak dapat menurunkannya secara otomatis seperti Debug. Dengan begitu, kamu memiliki kendali penuh atas tampilan tipemu bagi pengguna.
Output-mu harus menampilkan produk dalam format yang rapi dan mudah digunakan:
{name} - ${price}Contohnya, dengan input Wireless Mouse dan 29.99:
Wireless Mouse - $29.99Kamu akan menerima dua input: nama produk dan harganya (parse sebagai f64).
Coba sendiri
mod product;
use product::Product;
fn main() {
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut price_input = String::new();
std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// TODO: Buat instance Product dengan nama dan harga
// TODO: Tampilkan produk menggunakan formatter {}
}
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 Peliharaan7Trait Standar
Trait DebugTrait DisplayClone dan CopyTrait KesetaraanRingkasan: Titik yang Dapat Dicetak2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online