Özet - Hayvanat Bahçesi Yöneticisi
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 48 / 61.
Görev
KolayÖğrendiğin tüm trait nesnesi kavramlarını bir araya getiren bir hayvanat bahçesi yöneticisi oluşturalım! Her biri kendine özgü bir sese sahip farklı hayvanların tek bir koleksiyonda saklanabildiği ve teker teker konuşturulabildiği bir sistem oluşturacaksın.
Kodunu iki dosyaya ayıracaksın:
animals.rs:Speakalan ve birspeakdöndüren&selfmetoduna sahip herkese açık birStringtrait'i tanımla. Ardından, her birinin herkese açık birDogalanı (String) bulunduğu üç herkese açık yapı,Cat,Birdvename, oluştur. Her hayvan içinSpeaktrait'ini, karakteristik seslerini kullanarak uygula:- Dog,
{name} says: Woof!döndürmelidir - Cat,
{name} says: Meow!döndürmelidir - Bird,
{name} says: Tweet!döndürmelidir
- Dog,
main.rs: Hayvanlar modülünü dahil et ve bir hayvanat bahçesi oluştur! Sağlanan girdileri kullanarak her hayvan türünden bir tane içeren birVec<Box<dyn Speak>>oluştur. Bunları şu sırayla ekle: önce Dog, ardından Cat, sonra Bird. Son olarak hayvanat bahçende dolaş ve her hayvanın sesini kendi satırına yazdır.
Bu görev, trait nesnelerinin gerçek gücünü gösterir: tamamen farklı üç hayvan türü tek bir koleksiyonda birlikte yaşar ve her biri aynı speak() çağrısına kendine özgü davranışıyla yanıt verir.
Çıktın, her hayvanın sırayla konuştuğunu göstermelidir:
{dog_name} says: Woof!
{cat_name} says: Meow!
{bird_name} says: Tweet!Örneğin, girdiler Rex, Whiskers ve Tweety olduğunda:
Rex says: Woof!
Whiskers says: Meow!
Tweety says: Tweet!Üç girdi alacaksın: köpeğin adı, kedinin adı ve kuşun adı.
Kendin dene
mod animals;
use animals::{Speak, Dog, Cat, Bird};
fn main() {
// Hayvan isimleri için girdi oku
let mut dog_name = String::new();
std::io::stdin().read_line(&mut dog_name).expect("Failed to read line");
let dog_name = dog_name.trim().to_string();
let mut cat_name = String::new();
std::io::stdin().read_line(&mut cat_name).expect("Failed to read line");
let cat_name = cat_name.trim().to_string();
let mut bird_name = String::new();
std::io::stdin().read_line(&mut bird_name).expect("Failed to read line");
let bird_name = bird_name.trim().to_string();
// TODO: zoo adında bir Vec<Box<dyn Speak>> oluştur
// Hayvanları sırayla ekle: önce Dog, sonra Cat, sonra Bird
// TODO: zoo üzerinde dolaş ve her hayvanın sesini 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 Player9Trait Nesneleri
Dinamik GönderimTrait VektörleriTrait Nesneleri Üzerinde YinelemeÖzet - Hayvanat Bahçesi YöneticisiKendi başına pratik yap: Online Rust derleyicisi