مراجعة - مدير حديقة الحيوان
جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 48 من 61.
التحدي
سهللنَبْنِ مديرًا لحديقة حيوانات يجمع بين جميع مفاهيم كائنات السمات التي تعلمتها! ستنشئ نظامًا يمكنه تخزين حيوانات مختلفة، لكل منها صوتها الفريد، في مجموعة واحدة وجعلها تتحدث واحدًا تلو الآخر.
ستنظّم شيفرتك عبر ملفين:
animals.rs: عرّف سمةSpeakعامةً مع أسلوبspeakيأخذ&selfويُرجعString. ثم أنشئ ثلاثة هياكل عامة، هيDogوCatوBird، لكل منها حقلnameعام (String). طبّق سمةSpeakلكل حيوان مع أصواته المميزة:- يجب أن يُرجع Dog القيمة
{name} says: Woof! - يجب أن يُرجع Cat القيمة
{name} says: Meow! - يجب أن يُرجع Bird القيمة
{name} says: Tweet!
- يجب أن يُرجع Dog القيمة
main.rs: استورد وحدة الحيوانات وأنشئ حديقة حيوانات! أنشئVec<Box<dyn Speak>>تحتوي على واحد من كل نوع من الحيوانات باستخدام المدخلات المُعطاة. أضفها بالترتيب: Dog أولًا، ثم Cat، ثم Bird. وأخيرًا، كرّر عبر حديقة الحيوانات واطبع صوت كل حيوان في سطر مستقل.
يوضّح هذا التحدي القوة الحقيقية لكائنات السمات: ثلاثة أنواع مختلفة تمامًا من الحيوانات تعيش معًا في مجموعة واحدة، ويستجيب كل منها لاستدعاء speak() نفسه بسلوكه الفريد.
يجب أن يعرض ناتجك كل حيوان وهو يتحدث بالترتيب:
{dog_name} says: Woof!
{cat_name} says: Meow!
{bird_name} says: Tweet!على سبيل المثال، مع المدخلات Rex وWhiskers وTweety:
Rex says: Woof!
Whiskers says: Meow!
Tweety says: Tweet!ستتلقى ثلاث مدخلات: اسم الكلب، واسم القط، واسم الطائر.
جرّب بنفسك
mod animals;
use animals::{Speak, Dog, Cat, Bird};
fn main() {
// اقرأ المدخلات لأسماء الحيوانات
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: أنشئ Vec<Box<dyn Speak>> يسمى zoo
// أضف الحيوانات بالترتيب: Dog أولاً، ثم Cat، ثم Bird
// TODO: مرّ عبر zoo واطبع صوت كل حيوان
}
جميع دروس البرمجة كائنية التوجه
1الأساليب والسلوك
مقدمة في كتل التنفيذمعامل Selfالأساليب القابلة للتعديلالدوال المرتبطةكتل تنفيذ متعددةتسلسل الأساليبمراجعة - إجراءات المستطيل4مشروع: حيوان أليف افتراضي
تعريف الحيوان الأليفإطعام الحيوان الأليف2التغليف والوحدات البرمجية
أساسيات الوحدات البرمجيةالكلمة المفتاحية Publicالحقول الخاصةدوال Gettersدوال Settersمراجعة - الخزانة الآمنة5الأنواع العامة (Generics)
الـ Structs العامةالـ Methods العامةأنواع عامة متعددةالـ Functions العامةمراجعة - Coordinate Point3التعدادات المتقدمة (Advanced Enums)
التعدادات مع البياناتالأساليب (Methods) في التعداداتمطابقة حالات البياناتمراجعة التعداد Optionملخص - التعداد Shape6تعريف الـ Traits
ما هي الـ Trait؟تنفيذ الـ Traitsالتنفيذات الافتراضيةتجاوز التنفيذات الافتراضيةالـ Traits مع المعاملاتملخص - مشغل الوسائط9كائنات Trait
الإرسال الديناميكي (Dynamic Dispatch)متجهات من الـ Traitsالتكرار عبر كائنات Traitمراجعة - مدير حديقة الحيوانتدرّب بنفسك: مترجم Rust عبر الإنترنت