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

ملخص - محاكاة الـ Smart Pointer

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

challenge icon

التحدي

سهل

لنقم ببناء محاكاة لمؤشر ذكي يسمى SmartBox يوضح كيفية عمل المؤشرات الذكية الفعلية في Rust تحت الغطاء! سيكون الغلاف الخاص بك عاماً (generic)، ويوفر الوصول إلى قيمته الداخلية، ويعلن تلقائياً عندما يتم تنظيفه.

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

  • smart_box.rs: قم بتعريف هيكل عام عام (public generic struct) باسم SmartBox<T> مع حقل واحد value من النوع T. قم بتنفيذ دالة مرتبطة (associated function) باسم new تقوم بإنشاء SmartBox وتطبع رسالة إنشاء. أضف طريقة get تعيد مرجعاً (reference) للقيمة الداخلية. أخيراً، قم بتنفيذ سمة Drop لطباعة رسالة تنظيف عندما يخرج SmartBox عن النطاق (scope).
  • main.rs: قم باستيراد وحدة smart_box الخاصة بك واستعرض SmartBox الخاص بك مع نوعين مختلفين. أنشئ SmartBox<i32> يحمل رقماً و SmartBox<String> يحمل نصاً (كلاهما من المدخلات المقدمة). اطبع القيم باستخدام طريقة get الخاصة بك. ستظهر رسائل Drop تلقائياً عندما تخرج الصناديق عن النطاق في نهاية main.

عند إنشاء SmartBox، يجب أن يطبع:

SmartBox created

عند الوصول إلى القيمة، اطبعها بهذا التنسيق:

Value: {value}

عندما يتم إسقاط (drop) SmartBox، يجب أن يطبع:

SmartBox dropped

على سبيل المثال، مع المدخلات 42 و Hello:

SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped

لاحظ كيف يتم إنشاء كلا الصندوقين أولاً، ثم يتم الوصول إلى قيمهما، وأخيراً يتم إسقاطهما بترتيب عكسي (آخر ما تم إنشاؤه، أول ما يتم إسقاطه) عندما تنتهي دالة main.

ستتلقى مدخلين: قيمة عدد صحيح (قم بتحليلها كـ i32) وقيمة نصية.

جرّب بنفسك

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // قراءة المدخلات
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let number: i32 = input1.trim().parse().expect("Failed to parse number");
    
    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let text = input2.trim().to_string();
    
    // TODO: قم بإنشاء SmartBox<i32> يحتوي على number
    
    // TODO: قم بإنشاء SmartBox<String> يحتوي على text
    
    // TODO: اطبع القيم باستخدام الطريقة get
    // التنسيق: "Value: {value}"
    
    // ستظهر رسائل Drop تلقائياً عند انتهاء main
}

جميع دروس Object Oriented Programming