Özet - Generic Yazıcı
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 44 / 61.
Görev
KolayTrait sınırlarının gücünü gösteren esnek bir duyuru sistemi inşa edelim! Bir Printable traiti ve bu traiti uygulayan herhangi bir türü duyurabilen genel (generic) bir fonksiyon oluşturacaksınız; böylece generic'lerin ve trait'lerin yeniden kullanılabilir, tip güvenli kod oluşturmak için nasıl birlikte çalıştığını göreceksiniz.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
printable.rs:&selfalan ve birStringdöndürenprint_infometoduna sahip, genel kullanıma açık (public) birPrintabletraiti tanımlayın. Ardından,Printabletraitini uygulayan herhangi birTtürünü kabul edenannounceadında genel kullanıma açık bir generic fonksiyon oluşturun. Bu fonksiyon,{info}öğeninprint_info()metodunun çağrılmasından gelen sonuç olmak üzere,"Announcement: {info}"çıktısını yazdırmalıdır.main.rs:Printabletraitini uygulayan iki adet public struct oluşturun:Person— public birnamealanına (String) sahip.print_infometodu"Person: {name}"döndürmelidir.Product— publicname(String) veprice(f64) alanlarına sahip.print_infometodu"Product: {name} - ${price}"döndürmelidir.
Printabletürüyle çalıştığını kanıtlamak için her biriyleannouncefonksiyonunu çağırın.
Bu tasarımın güzelliği, announce fonksiyonunun bir Person mı, Product mı yoksa gelecekteki başka bir tür mü aldığıyla ilgilenmemesidir; yalnızca türün print_info() aracılığıyla bilgi sağlayabilmesini gerektirir. Trait sınırı (trait bound), bunu derleme zamanında garanti eder.
Çıktınız her iki duyuruyu da göstermelidir:
Announcement: Person: {name}
Announcement: Product: {product_name} - ${price}Örneğin, Alice, Laptop ve 999.99 girdileriyle:
Announcement: Person: Alice
Announcement: Product: Laptop - $999.99Üç girdi alacaksınız: kişinin adı, ürün adı ve ürün fiyatı (f64 olarak ayrıştırın).
Kendin dene
mod printable;
use printable::{Printable, announce};
// TODO: Genel (public) bir name alanına (String) sahip genel bir Person yapısı (struct) tanımlayın
// Person için Printable trait'ini uygulayın
// print_info "Person: {name}" döndürmelidir
// TODO: Genel name (String) ve price (f64) alanlarına sahip genel bir Product yapısı (struct) tanımlayın
// Product için Printable trait'ini uygulayın
// print_info "Product: {name} - ${price}" döndürmelidir
fn main() {
// Girdileri oku
let mut person_name = String::new();
std::io::stdin().read_line(&mut person_name).expect("Failed to read line");
let person_name = person_name.trim().to_string();
let mut product_name = String::new();
std::io::stdin().read_line(&mut product_name).expect("Failed to read line");
let product_name = product_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: person_name ile bir Person örneği oluşturun
// TODO: product_name ve price ile bir Product örneği oluşturun
// TODO: Person ile announce fonksiyonunu çağırın
// TODO: Product ile announce fonksiyonunu çağırın
}
Object Oriented Programming 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ı Besleme2Kapsü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 Player