القيم المرجعة وعوامل Splat
في الدرس السابق تعلمنا كيفية تعريف الدوال واستدعائها. الآن سنتعلم كيف تُرجع الدوال قيماً، وكيف نستخدم عوامل Splat للتعامل مع عدد متغير من الوسائط.
القيم المرجعة (Return Values)
كل دالة في روبي تُرجع قيمة. هذه القيمة يمكن حفظها في متغير أو استخدامها مباشرة.
الإرجاع الضمني (Implicit Return)
في روبي، الدالة تُرجع آخر قيمة تم حسابها تلقائياً:
الإرجاع الصريح (Explicit Return)
يمكن استخدام كلمة return للإرجاع صراحةً:
متى نستخدم return الصريح؟
إرجاع قيم متعددة
يمكن للدالة إرجاع عدة قيم باستخدام مصفوفة:
مثال عملي: دالة حسابية
عامل Splat (*args)
عامل Splat (*) يسمح للدالة باستقبال عدد غير محدد من الوسائط:
كيف يعمل Splat؟
دمج Splat مع معاملات عادية
أمثلة عملية على Splat
عامل Double Splat (**kwargs)
عامل Double Splat (**) يستقبل وسائط مسماة كقاموس (Hash):
الوصول للقيم
دمج معاملات عادية مع Double Splat
الدمج الكامل: كل الأنواع معاً
ترتيب المعاملات
الترتيب الصحيح للمعاملات في تعريف الدالة:
- المعاملات الإلزامية
- المعاملات ذات القيم الافتراضية
*args(Splat)- المعاملات المسماة (keyword arguments)
**kwargs(Double Splat)&block(كتلة - سنتعلمها لاحقاً)
استخدام Splat عند الاستدعاء
يمكن استخدام Splat لتفكيك مصفوفة إلى وسائط:
جدول ملخص
| المفهوم | الصيغة | الوصف |
|---|---|---|
| إرجاع ضمني | آخر سطر | يُرجع آخر قيمة محسوبة |
| إرجاع صريح | return value | يُرجع قيمة ويخرج من الدالة |
| إرجاع متعدد | return [a, b] أو [a, b] | يُرجع عدة قيم كمصفوفة |
| Splat | def foo(*args) | يستقبل عدد غير محدد من الوسائط |
| Double Splat | def foo(**kwargs) | يستقبل وسائط مسماة كقاموس |
| تفكيك مصفوفة | foo(*array) | يُحول مصفوفة إلى وسائط |
| تفكيك قاموس | foo(**hash) | يُحول قاموس إلى وسائط مسماة |
أخطاء شائعة
1. نسيان أن آخر قيمة تُرجع
2. خلط ترتيب المعاملات
3. استخدام return في آخر سطر (غير ضروري)
نصائح مهمة
- استخدم الإرجاع الضمني - هو أسلوب روبي المُفضل
- استخدم return للخروج المبكر - عند التحقق من الأخطاء
- Splat للمرونة - عندما لا تعرف عدد الوسائط مسبقاً
- Double Splat للخيارات - للإعدادات والتكوينات
- تجنب التعقيد - لا تستخدم كل الأنواع في دالة واحدة إلا عند الضرورة
تمرين: دالة متعددة الوسائط
حان وقت التطبيق! في محرر الشيفرة على اليسار:
المطلوب:
- عرّف دالة
sum_allتستقبل أي عدد من الأرقام وتُرجع مجموعها - عرّف دالة
describe_personتستقبلname(إلزامي) ووسائط مسماة اختيارية - اختبر الدالتين وفق الناتج المتوقع
تلميحات:
- استخدم
*numbersلاستقبال عدد متغير من الوسائط - استخدم
**infoلاستقبال وسائط مسماة - تذكر أن
reduce(:+)يجمع عناصر المصفوفة
الناتج المتوقع:
تذكّر: الدوال في روبي تُرجع دائماً قيمة - استفد من هذا لكتابة شيفرة أنظف!