Display Trait'i
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama 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çimlendiricisini çalıştıran şey budur. Debug özelliğinin aksine Rust, Display özelliğini otomatik olarak türetemez. Bunu manuel olarak uygulamanız gerekir.
Display uygulamak için fmt modülünü içeri aktarmanız ve fmt yöntemini 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 write! makrosunu kullanır, yapının alanlarına self üzerinden erişirsiniz.
Artık yapıyı standart {} biçimlendiricisiyle 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 kullanışlıdır), Display çıktısı ise düzenlenmiştir ve son kullanıcılar için tasarlanmıştır. Bir struct her ikisini de uygulayabilir: hata ayıklama için {:?}, temiz çıktı için {} kullanın.
Görev
KolayKullanıcı dostu bir ürün görüntüleme sistemi oluşturalım! Debug verilerinizin ham yapısını gösterirken, Display özelliği son kullanıcılar için mükemmel, düzenli ve insanlar tarafından okunabilir bir çıktı oluşturmanızı sağlar.
Kodunuzu iki dosyaya ayıracaksınız:
product.rs: İki public alana sahip birProductstruct'ı tanımlayın:name(String) veprice(f64). Struct'ınız içinDisplayözelliğini uygulayın; böylece{name} - ${price}biçiminde biçimlendirilir.std::fmt'yi içe aktarmayı vewrite!metodunuzun içindefmtmakrosunu kullanmayı unutmayın.main.rs: Ürün modülünüzü içe aktarın ve sağlanan girdileri kullanarak birProductörneği oluşturun. Özel görüntüleme çıktınızı göstermek için ürünü standart{}biçimlendiriciyi kullanarak yazdırın.
Display özelliğ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 sağlar.
Çıktınız ürünü temiz ve kullanıcı dostu bir biçimde göstermelidir:
{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).
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: name ve price ile bir Product örneği oluştur
// TODO: ürünü {} biçimlendiricisini kullanarak yazdır
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme7Standart Trait'ler
Debug Trait'iDisplay Trait'iClone ve CopyEşitlik Trait'leriÖzet - Yazdırılabilir Nokta2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi