Kütüphane Kataloğu
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 60 / 61.
Görev
KolayTrait'lerin farklı türleri ortak bir arayüz altında nasıl birleştirdiğini gösteren bir kütüphane katalog sistemi oluşturalım! Farklı özelliklere sahip olmalarına rağmen kitapların ve dergilerin ortak bir trait aracılığıyla kendilerini tanımlayabildikleri bir katalog oluşturacaksınız.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
catalog.rs: BirStringdöndüren tek birdescriptionmetoduna sahipCatalogItemtrait'ini tanımlayın. Bu trait, tüm kütüphane öğelerinin yerine getirmesi gereken sözleşmeyi belirler.items.rs: Trait'inizi uygulayan iki struct oluşturun. BirBook,titleveauthor(her ikisi de String) alanlarına sahipken, birMagazine,name(String) veissuenumarasına (u32) sahiptir. Her struct,CatalogItemtrait'ini kendi benzersiz açıklama formatıyla uygulamalıdır.main.rs: Her iki modülü de dahil edin ve sağlanan girdileri kullanarak Book ve Magazine örnekleri oluşturun. Her öğe üzerindedescriptionmetodunu çağırın ve sonuçları yazdırın.
Book açıklamanız şu formatı takip etmelidir:
Book: {title} by {author}Magazine açıklamanız şu formatı takip etmelidir:
Magazine: {name}, Issue {issue}Örneğin, 1984, George Orwell, Nature ve 42 girdileriyle:
Book: 1984 by George Orwell
Magazine: Nature, Issue 42Ve The Rust Book, Steve Klabnik, Science Weekly ve 156 girdileriyle:
Book: The Rust Book by Steve Klabnik
Magazine: Science Weekly, Issue 156Dört girdi alacaksınız: kitap başlığı, kitap yazarı, dergi adı ve dergi sayı numarası (sonuncusunu u32 olarak ayrıştırın).
Kendin dene
mod catalog;
mod items;
use catalog::CatalogItem;
use items::{Book, Magazine};
fn main() {
// Girdileri oku
let mut book_title = String::new();
std::io::stdin().read_line(&mut book_title).expect("Failed to read line");
let book_title = book_title.trim().to_string();
let mut book_author = String::new();
std::io::stdin().read_line(&mut book_author).expect("Failed to read line");
let book_author = book_author.trim().to_string();
let mut magazine_name = String::new();
std::io::stdin().read_line(&mut magazine_name).expect("Failed to read line");
let magazine_name = magazine_name.trim().to_string();
let mut issue_input = String::new();
std::io::stdin().read_line(&mut issue_input).expect("Failed to read line");
let magazine_issue: u32 = issue_input.trim().parse().expect("Failed to parse issue number");
// TODO: book_title ve book_author kullanarak bir Book örneği oluşturun
// TODO: magazine_name ve magazine_issue kullanarak bir Magazine örneği oluşturun
// TODO: Her öğe üzerinde description() metodunu çağırın ve sonuçları yazdı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