Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مدير حديقة الحيوان

جزء من قسم Object Oriented Programming في رحلة Rust على Coddy. الدرس 48 من 61.

challenge icon

التحدي

سهل

لنقم ببناء مدير حديقة حيوان يجمع كل مفاهيم كائنات السمات (trait objects) التي تعلمتها! ستقوم بإنشاء نظام حيث يمكن تخزين حيوانات مختلفة — لكل منها صوتها الفريد — في مجموعة واحدة وجعلها تتحدث واحداً تلو الآخر.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • animals.rs: قم بتعريف سمة (trait) عامة باسم Speak مع طريقة speak تأخذ &self وتعيد String. ثم أنشئ ثلاث هياكل (structs) عامة — Dog و Cat و Bird — لكل منها حقل name عام من نوع (String). قم بتنفيذ سمة Speak لكل حيوان بأصواتهم المميزة:
    • يجب أن يعيد Dog القيمة "{name} says: Woof!"
    • يجب أن يعيد Cat القيمة "{name} says: Meow!"
    • يجب أن يعيد Bird القيمة "{name} says: Tweet!"
  • main.rs: قم باستيراد وحدة الحيوانات الخاصة بك وأنشئ حديقة حيوان! قم ببناء Vec<Box<dyn Speak>> يحتوي على واحد من كل نوع من الحيوانات باستخدام المدخلات المقدمة. أضفهم بالترتيب: Dog أولاً، ثم Cat، ثم Bird. أخيراً، قم بالمرور عبر حديقة الحيوان الخاصة بك واطبع صوت كل حيوان في سطر مستقل.

يوضح هذا التحدي القوة الحقيقية لكائنات السمات (trait objects) — ثلاثة أنواع مختلفة تماماً من الحيوانات تعيش معاً في مجموعة واحدة، وكل منها يستجيب لنفس استدعاء 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 واطبع صوت كل حيوان
}

جميع دروس Object Oriented Programming

تدرّب بنفسك: مترجم Rust عبر الإنترنت