Menu
Coddy logo textTech

Display Trait'i

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 36 / 61.

Debug geliştiricilerin verileri incelemesi için harika olsa da, Display özelliği kullanıcıya yönelik çıktı için tasarlanmıştır. println! içindeki {} biçimlendiricisine güç veren budur. Debug'ın aksine, Rust Display özelliğini otomatik olarak türetemez; onu manuel olarak uygulamanız gerekir.

Display özelliğini uygulamak için, fmt modülünü dahil etmeniz ve fmt metodunu uygulamanız gerekir:

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)
    }
}

fmt metodu bir Formatter alır ve bir fmt::Result döndürür. Çıktınızı biçimlendirmek için self üzerinden yapının alanlarına erişerek write! makrosunu kullanırsınız.

Artık struct'ı standart {} formatlayıcı ile yazdırabilirsiniz:

let temp = Temperature { celsius: 23.5 };
println!("{}", temp);  // 23.5°C

Temel fark: Debug çıktısı verilerinizin yapısını gösterir (hata ayıklama için yararlıdır), Display çıktısı ise cilalanmıştır ve son kullanıcılar için tasarlanmıştır. Bir struct her ikisini de uygulayabilir—hata ayıklama için {:?} ve temiz çıktı için {} kullanın.

challenge icon

Görev

Kolay

Kullanıcı dostu bir ürün görüntüleme sistemi oluşturalım! Debug verilerinizin ham yapısını gösterirken, Display trait'i son kullanıcılar için mükemmel, cilalanmış ve insan tarafından okunabilir çıktılar hazırlamanıza olanak tanır.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • product.rs: İki genel (public) alana sahip genel bir Product struct'ı tanımlayın: name (String) ve price (f64). Struct'ınız için Display trait'ini, {name} - ${price} şeklinde formatlanacak şekilde uygulayın. std::fmt kütüphanesini dahil etmeyi ve fmt metodunuzun içinde write! makrosunu kullanmayı unutmayın.
  • main.rs: Ürün modülünüzü dahil edin ve sağlanan girdileri kullanarak bir Product örneği oluşturun. Özel görüntüleme çıktınızı göstermek için ürünü standart {} formatlayıcısını kullanarak yazdırın.

Display trait'i, fmt metodunu manuel olarak uygulamanızı gerektirir; Rust bunu Debug gibi otomatik olarak türetemez. Bu, türünüzün kullanıcılara nasıl görüneceği üzerinde tam kontrol sahibi olmanızı sağlar.

Çıktınız, ürünü temiz ve kullanıcı dostu bir formatta görüntülemelidir:

{name} - ${price}

Örneğin, Wireless Mouse ve 29.99 girdileriyle:

Wireless Mouse - $29.99

İki girdi alacaksınız: ürün adı ve fiyat (f64 olarak ayrıştırın).

Kopya kağıdı

Display özelliği, kullanıcıya yönelik çıktı için tasarlanmıştır ve println! içindeki {} biçimlendiricisine güç verir. Debug özelliğinin aksine, manuel olarak uygulanmalıdır.

Display özelliğini uygulamak için fmt modülünü dahil edin ve fmt metodunu uygulayın:

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)
    }
}

fmt metodu bir Formatter alır ve bir fmt::Result döndürür. Çıktıyı biçimlendirmek için write! makrosunu kullanın ve yapı (struct) alanlarına self üzerinden erişin.

Yapıyı {} biçimlendiricisi ile yazdırın:

let temp = Temperature { celsius: 23.5 };
println!("{}", temp);  // 23.5°C

Temel fark: Debug ({:?}) hata ayıklama için veri yapısını gösterirken, Display ({}) son kullanıcılar için cilalanmış bir çıktı sağlar.

Kendin dene

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: İsim ve fiyat ile bir Product örneği oluşturun

    // TODO: {} biçimlendiriciyi kullanarak ürünü yazdırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler