🎯 إيه هي Higher-Order Functions؟ وليه تعتبر من أقوى مميزات JavaScript؟ وإزاي تستخدمها صح؟
كل ده هنعرفه بالتفصيل مع أمثلة عملية وتطبيقات حقيقية في محاضره النهارده…
📌 1- يعني إيه Higher-Order Function؟
Higher-Order Function (HOF) هي أي فانكشن بتعمل واحدة من الحاجتين دول:
- بتاخد فانكشن تانية كـ Parameter
- بترجع فانكشن جديدة كـ Output
ببساطة الفانكشن دي بتعامل الفانكشن التانية كأنها بيانات عادية
مثال سريع قبل ما ندخل في الجد 👀
higherOrderFunction(() => console.log(“✅ تم تنفيذ الكول باك!”));
🔹 Output:
هنا higherOrderFunction
أخدت فانكشن callback
كـ Argument ونفذتها جوه
📌 2- أشهر Higher-Order Functions في JavaScript
JavaScript فيها مجموعة جبارة من الـ HOFs الجاهزة وبتستخدمها يوميا:
🟢 map()
– تحويل كل عنصر في المصفوفة لشيء جديد
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
map()
بتاخد فانكشن وتطبقها على كل عنصر في المصفوفة وترجع مصفوفة جديدة
🟢 filter()
– تصفية العناصر اللي تحقق شرط معين
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
filter()
بترجع فقط العناصر اللي بتتحقق فيها الشرط اللي في الـ Callback
🟢 reduce()
– تنفيذ عملية حسابية على كل العناصر
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum); // 15
reduce()
بتاخد كل القيم في المصفوفة وتجمعهم أو تعمل عليهم أي عملية حسابية.
🟢 forEach()
– تنفيذ كود على كل عنصر بدون إرجاع قيمة جديدة
numbers.forEach(num => console.log(num * 2));
forEach()
بتستخدم لو عايز تنفذ كود على كل عنصر، لكن من غير ما ترجع مصفوفة جديدة.
📌 3- كتابة ال Higher-Order Function بنفسك
خلينا نكتب HOF بنفسنا حاجة زي multiplyBy
اللي بتاخد رقم وترجع فانكشن تضرب بيها أي قيمة
const double = multiplyBy(2);
const triple = multiplyBy(3);
console.log(double(5)); // 10
console.log(triple(5)); // 15
لاحظ إن multiplyBy
رجعت فانكشن تانية وده اللي بيخليها Higher-Order Function
📌 4- إمتى تستخدم Higher-Order Functions؟
- لما يكون عندك عمليات متكررة، وتحتاج تبسط الكود وتخليه أكثر مرونة.
- لما تشتغل بأسلوب Functional Programming وتستخدم Callbacks
- لما تحتاج إعادة استخدام الأكواد بدل ما تكتب نفس الفانكشن كذا مرة
🎯 تـــاســك عــمــلــي
🔹 المطلوب:
- استخدم
map()
عشان تحول Array من الأرقام إلى مربعاتها. - استخدم
filter()
عشان تجيب الأرقام الأكبر من 10 من Array. - اكتب Higher-Order Function اسمها
powerOf
تاخد رقم وترجع فانكشن ترفعه للأس.
📢 متنساش تسيب حلك في الكومنتات
قسم التعليقات