Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 struct Product publik dengan dua field publik: name (String) dan price (f64). Implementasikan trait Display untuk struct-mu agar formatnya menjadi {name} - ${price}. Ingat untuk menggunakan std::fmt dan makro write! di dalam method fmt.
  • main.rs: Gunakan module product-mu dan buat instance Product menggunakan 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.99

Kamu 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 {}
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online