القيم المرجعة وعوامل Splat

تعديل
نسخ الدرس
تحميل الدرس

القيم المرجعة وعوامل Splat

في الدرس السابق تعلمنا كيفية تعريف الدوال واستدعائها. الآن سنتعلم كيف تُرجع الدوال قيماً، وكيف نستخدم عوامل Splat للتعامل مع عدد متغير من الوسائط.

القيم المرجعة (Return Values)

كل دالة في روبي تُرجع قيمة. هذه القيمة يمكن حفظها في متغير أو استخدامها مباشرة.

الإرجاع الضمني (Implicit Return)

في روبي، الدالة تُرجع آخر قيمة تم حسابها تلقائياً:

الإرجاع الصريح (Explicit Return)

يمكن استخدام كلمة return للإرجاع صراحةً:

متى نستخدم return الصريح؟

إرجاع قيم متعددة

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

مثال عملي: دالة حسابية

عامل Splat (*args)

عامل Splat (*) يسمح للدالة باستقبال عدد غير محدد من الوسائط:

كيف يعمل Splat؟

دمج Splat مع معاملات عادية

أمثلة عملية على Splat

عامل Double Splat (**kwargs)

عامل Double Splat (**) يستقبل وسائط مسماة كقاموس (Hash):

الوصول للقيم

دمج معاملات عادية مع Double Splat

الدمج الكامل: كل الأنواع معاً

ترتيب المعاملات

الترتيب الصحيح للمعاملات في تعريف الدالة:

  1. المعاملات الإلزامية
  2. المعاملات ذات القيم الافتراضية
  3. *args (Splat)
  4. المعاملات المسماة (keyword arguments)
  5. **kwargs (Double Splat)
  6. &block (كتلة - سنتعلمها لاحقاً)

استخدام Splat عند الاستدعاء

يمكن استخدام Splat لتفكيك مصفوفة إلى وسائط:

جدول ملخص

المفهومالصيغةالوصف
إرجاع ضمنيآخر سطريُرجع آخر قيمة محسوبة
إرجاع صريحreturn valueيُرجع قيمة ويخرج من الدالة
إرجاع متعددreturn [a, b] أو [a, b]يُرجع عدة قيم كمصفوفة
Splatdef foo(*args)يستقبل عدد غير محدد من الوسائط
Double Splatdef foo(**kwargs)يستقبل وسائط مسماة كقاموس
تفكيك مصفوفةfoo(*array)يُحول مصفوفة إلى وسائط
تفكيك قاموسfoo(**hash)يُحول قاموس إلى وسائط مسماة

أخطاء شائعة

1. نسيان أن آخر قيمة تُرجع

2. خلط ترتيب المعاملات

3. استخدام return في آخر سطر (غير ضروري)

نصائح مهمة

  1. استخدم الإرجاع الضمني - هو أسلوب روبي المُفضل
  2. استخدم return للخروج المبكر - عند التحقق من الأخطاء
  3. Splat للمرونة - عندما لا تعرف عدد الوسائط مسبقاً
  4. Double Splat للخيارات - للإعدادات والتكوينات
  5. تجنب التعقيد - لا تستخدم كل الأنواع في دالة واحدة إلا عند الضرورة

تمرين: دالة متعددة الوسائط

حان وقت التطبيق! في محرر الشيفرة على اليسار:

المطلوب:

  1. عرّف دالة sum_all تستقبل أي عدد من الأرقام وتُرجع مجموعها
  2. عرّف دالة describe_person تستقبل name (إلزامي) ووسائط مسماة اختيارية
  3. اختبر الدالتين وفق الناتج المتوقع

تلميحات:

  • استخدم *numbers لاستقبال عدد متغير من الوسائط
  • استخدم **info لاستقبال وسائط مسماة
  • تذكر أن reduce(:+) يجمع عناصر المصفوفة

الناتج المتوقع:


تذكّر: الدوال في روبي تُرجع دائماً قيمة - استفد من هذا لكتابة شيفرة أنظف!