Kütüphane Kataloğu
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 60 / 61.
Görev
KolayFarklı türleri ortak bir arayüz altında birleştiren trait'lerin nasıl çalıştığını 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ımlayabildiği bir katalog oluşturacaksın.
Kodunu üç dosyaya ayıracaksın:
catalog.rs: Tek bir yöntem olan veCatalogItemdöndürendescriptionyöntemini içerenStringtrait'ini tanımla. Bu trait, tüm kütüphane öğelerinin yerine getirmesi gereken sözleşmeyi oluşturur.items.rs: Trait'ini uygulayan iki struct oluştur. BirBook(her ikisi de String olan) birtitleveauthoriçerirken, birMagazinebirname(String) veissuenumarası (u32) içerir. Her struct, kendine özgü açıklama biçimiyleCatalogItem'ı uygulamalıdır.main.rs: Her iki modülü de içe aktar ve sağlanan girdileri kullanarak Book ve Magazine örnekleri oluştur. Her öğe üzerindedescriptionyöntemini çağır ve sonuçları yazdır.
Book açıklaman şu biçimi izlemelidir:
Book: {title} by {author}Magazine açıklaman şu biçimi izlemelidir:
Magazine: {name}, Issue {issue}Örneğin, 1984, George Orwell, Nature ve 42 girdileriyle:
Book: 1984 by George Orwell
Magazine: Nature, Issue 42The 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: kitap başlığı, kitap yazarı, dergi adı ve dergi sayı numarası (sonuncusunu u32 olarak ayrıştır).
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ştur
// TODO: Create a Magazine instance using magazine_name and magazine_issue
// TODO: Her öğede description() çağır ve sonuçları yazdır
}
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ı 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 PlayerKendi başına pratik yap: Online Rust derleyicisi