ما هي Higher-Order Functions؟
في الدروس السابقة تعلمنا أن الدالة تستقبل بيانات، تعالجها، ثم تُرجع نتيجة.
لكن في JavaScript، الدوال نفسها تُعتبر قيمًا (Values)، تمامًا مثل الأرقام أو النصوص.
وهذا يعني أنه يمكن:
- تمرير دالة إلى دالة أخرى.
- أو جعل دالة تُرجع دالة أخرى.
الدوال التي تستقبل دوالًا أو تُرجع دوالًا تُسمى Higher-Order Functions.
مثال
function add(a, b) { return a + b;}
function calculate(number1, number2, fn) { return fn(number1, number2);}
console.log(calculate(1, 2, add));ماذا حدث؟
أنشأنا دالة بسيطة باسم add.
function add(a, b) { return a + b;}ثم أنشأنا دالة أخرى باسم calculate.
function calculate(number1, number2, fn) { return fn(number1, number2);}لاحظ أن الوسيط الثالث (fn) ليس رقمًا أو نصًا، بل دالة.
وعندما كتبنا:
calculate(1, 2, add);قمنا بتمرير الدالة add نفسها، وليس نتيجة تنفيذها.
داخل calculate تم استدعاء الدالة بهذه الطريقة:
fn(number1, number2);وبما أن fn تشير إلى add، أصبح التنفيذ مكافئًا لكتابة:
add(1, 2);فتكون النتيجة:
3لماذا نستخدم هذا الأسلوب؟
يسمح لنا هذا الأسلوب بجعل الدوال أكثر مرونة.
فبدلًا من أن تكون calculate مسؤولة عن عملية الجمع فقط، يمكنها تنفيذ أي عملية طالما استقبلت دالة مناسبة.
على سبيل المثال، يمكن تمرير دالة للجمع أو الطرح أو الضرب أو القسمة، دون الحاجة إلى تعديل calculate.
وهذا من أكثر الأساليب استخدامًا في JavaScript، وستراه كثيرًا مع دوال مثل:
map()filter()reduce()
ماذا يجب أن تتذكر؟
- في JavaScript، يمكن التعامل مع الدوال كأي قيمة أخرى.
- يمكن تمرير دالة إلى دالة أخرى كوسيط.
- الدوال التي تستقبل أو تُرجع دوالًا تُسمى Higher-Order Functions.
- هذا الأسلوب يجعل الكود أكثر مرونة وقابلية لإعادة الاستخدام.