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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 48 من 61.

challenge icon

التحدي

سهل

لنَبْنِ مديرًا لحديقة حيوانات يجمع بين جميع مفاهيم كائنات السمات التي تعلمتها! ستنشئ نظامًا يمكنه تخزين حيوانات مختلفة، لكل منها صوتها الفريد، في مجموعة واحدة وجعلها تتحدث واحدًا تلو الآخر.

ستنظّم شيفرتك عبر ملفين:

  • animals.rs: عرّف سمة Speak عامةً مع أسلوب speak يأخذ &self ويُرجع String. ثم أنشئ ثلاثة هياكل عامة، هي 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. وأخيرًا، كرّر عبر حديقة الحيوانات واطبع صوت كل حيوان في سطر مستقل.

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

جميع دروس البرمجة كائنية التوجه

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