شرح المفهوم
يقدم هذا الدرس الأداء من منظور C++ مناسب للمبتدئين: ليس التحسين الدقيق (micro-optimization)، بل اختيار هياكل بسيطة تتجنب الهدر وتبقى آمنة. ستعمل مع مثال صغير يستخدم إدارة الموارد التلقائية، ثم ستنظر في سبب كون هذا النمط أسرع وأكثر موثوقية عادةً من أنماط التخصيص اليدوي. الهدف هو ملاحظة كيف تؤثر الملكية وعمر الكائن والواجهات النظيفة على كل من السرعة وسهولة الصيانة. بحلول النهاية، يجب أن تكون قادرًا على شرح سبب تفضيل C++ الحديثة للكود القائم على RAII وكيف يساعد هذا الاختيار في البرامج اليومية.
أين تضع الكود
- ابدأ بالمتغيرات والمدخلات. حافظ على `includes`، ودالة `main`، وأنواع البيانات واضحة.
- أضف منطق المعالجة في القسم الأوسط.
- اختتم بالإخراج والتحقق السريع.
مرجع الأوامر
- قم بتجميع وتشغيل المثال، ثم اشرح من يملك العدد الصحيح ومتى يتم تحريره.
- استبدل القيمة المخزنة برقم ثانٍ وتأكد من أن الإخراج يتغير كما هو متوقع.
- قارن هذه النسخة القائمة على RAII بنسخة المؤشر الخام (raw pointer) ولاحظ أيهما أسهل في الفهم.
- اكتب سببًا ملموسًا واحدًا لماذا يفضل كود C++ الحديث غالبًا التنظيف التلقائي على `delete` اليدوي.
دليل خطوة بخطوة
- ابنِ البرنامج مرة واحدة وتأكد من أنه يطبع القيمة المخزنة بشكل صحيح.
- حدد السطر الذي ينشئ المورد والجزء المسؤول عن التنظيف في البرنامج.
- غيّر القيمة أو نص الإخراج، ثم شغّل مرة أخرى للتحقق من التعديل.
- صف في جملة واحدة لماذا `std::make_unique` أكثر أمانًا من التخصيص اليدوي لهذه الحالة.
- اختتم بقائمة تحقق قصيرة: إخراج صحيح، ملكية واضحة، ولا يوجد كود غير ضروري.
تمارين تطبيقية
- أنشئ مثالاً مشابهًا يخزن مستوى لاعب أو عدد منتجات بدلاً من النتيجة.
- اكتب نسخة ثانية بدالة مساعدة (helper function) تُرجع مؤشرًا ذكيًا (smart pointer) واطبع النتيجة في `main`.
- أعد هيكلة المثال بحيث تصف أسماء المتغيرات البيانات بشكل أوضح.
تحديات برمجية
- طبق كلاً من نسخة المؤشر الخام (raw pointer) ونسخة `std::unique_ptr`، ثم قارن سهولة القراءة والمخاطر.
- وسّع البرنامج بحيث يدير قيمتين ويحافظ على الملكية واضحة وتلقائية.
مهام تمرين صغيرة
- أعد تسمية متغير واحد لجعل غرضه واضحًا.
- أضف سطر طباعة إضافي يؤكد أن البرنامج يعمل بشكل صحيح.
- اكتب ملاحظة من سطر واحد حول كيف يساعد RAII الأداء والسلامة معًا.
خطأ شائع
Skipping input validation or mixing logic/output in one unstructured block.
تحدٍ مصغّر من الواقع
Build a small real-life example for this lesson topic using 3 clear steps: input, process, output.