| المفهوم | الصيغة | الاستخدام |
|---|---|---|
| معامل افتراضي | function(x = 10) | قيمة بديلة عند عدم التمرير |
| Rest Parameter | function(...args) | تجميع عدد غير محدد من الوسائط |
| Higher-Order Function | دالة تُعيد دالة | إنشاء دوال مخصصة ديناميكياً |
المعاملات (Parameters) هي الأسماء التي تُعرَّف بها الدالة لاستقبال بيانات من الخارج، بينما القيم الممررة فعلياً عند الاستدعاء تُسمى الوسائط (Arguments). جافاسكريبت مرنة جداً في هذا الجانب: يمكنك تمرير عدد وسائط أقل أو أكثر مما تتوقعه الدالة دون أي خطأ — الزائد يُتجاهل، والناقص يصبح undefined.
يمكن تحديد قيم افتراضية للمعاملات (Default Parameters) منذ ES6، بحيث إذا لم يُمرَّر وسيط لمعامل معين، أو مُرِّرت له undefined صراحة، يأخذ القيمة الافتراضية المحددة بدلاً من ذلك. هذا يُغني عن الطريقة القديمة للتحقق يدوياً داخل جسم الدالة.
عندما تحتاج دالة لاستقبال عدد غير محدد من الوسائط، تستخدم عامل الجمع (Rest Parameter) بصيغة ...اسم في نهاية قائمة المعاملات، وهو يُجمّع كل الوسائط الإضافية في مصفوفة واحدة يمكن التعامل معها بسهولة (بعكس كائن arguments القديم الذي كان أقل مرونة).
بخصوص return، يمكن للدالة إعادة أي نوع بيانات: رقم، نص، كائن، مصفوفة، أو حتى دالة أخرى — وهذا الأخير أساس مهم في مفاهيم متقدمة مثل Closures والدوال العليا (Higher-Order Functions). دالة تُعيد دالة أخرى تُستخدم بكثرة لإنشاء دوال مخصصة (مثل دالة تُنشئ دوال ضرب بقيمة ثابتة معينة).
| 1 | // معامل بقيمة افتراضية |
| 2 | function ترحيب(اسم = "ضيف") { |
| 3 | return `أهلاً ${اسم}`; |
| 4 | } |
| 5 | |
| 6 | // Rest Parameter لعدد غير محدد من الوسائط |
| 7 | function جمع_الكل(...أرقام) { |
| 8 | return أرقام.reduce((مجموع, رقم) => مجموع + رقم, 0); |
| 9 | } |
| 10 | جمع_الكل(1, 2, 3, 4); // 10 |
مثال 1: دالة تُنشئ وتُعيد دالة أخرى
| 1 | // دالة تُعيد دالة أخرى (Higher-Order Function) |
| 2 | function منشئ_ضارب(معامل) { |
| 3 | return function (رقم) { |
| 4 | return رقم * معامل; |
| 5 | }; |
| 6 | } |
| 7 | |
| 8 | const ضاعف = منشئ_ضارب(2); |
| 9 | const ثلّث = منشئ_ضارب(3); |
| 10 | console.log(ضاعف(5)); // 10 |
| 11 | console.log(ثلّث(5)); // 15 |
مثال 2: Rest Parameters وقيم افتراضية متقدمة
| 1 | // Rest Parameters في التطبيق |
| 2 | function أكبر_رقم(...أرقام) { |
| 3 | return Math.max(...أرقام); |
| 4 | } |
| 5 | console.log(أكبر_رقم(4, 8, 15, 2)); // 15 |
| 6 | |
| 7 | // القيم الافتراضية تعتمد على معاملات سابقة أيضاً |
| 8 | function مستطيل(طول, عرض = طول) { |
| 9 | return طول * عرض; |
| 10 | } |
| 11 | console.log(مستطيل(5)); // 25 (مربع) |