Q31. What are higher-order functions in JavaScript?
যে ফাংশন অন্য ফাংশনকে আর্গুমেন্ট হিসেবে নেয় বা ফেরত দেয়, তার ধারণা ও বাস্তব উদাহরণ।
Higher-order function হলো এমন ফাংশন যে অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে, অথবা নতুন ফাংশন ফেরত দেয়। সহজ ভাষায় — ফাংশনকে যদি অন্য ফাংশনের সাথে মেশানো যায়, সেটাই higher-order।
map, filter, reduce, setTimeout, addEventListener — সবগুলোই higher-order function, কারণ এরা callback function নেয়।
// ১. ফাংশনকে আর্গুমেন্ট হিসেবে নেয়
function twice(fn, value) {
return fn(fn(value));
}
console.log(twice((n) => n * 2, 5)); // 20// ২. নতুন ফাংশন ফেরত দেয়
function makeAdder(n) {
return function (x) {
return x + n;
};
}
const add10 = makeAdder(10);
const add5 = makeAdder(5);
console.log(add10(3)); // 13
console.log(add5(3)); // 8ধাপে ধাপে — makeAdder(10) ডাকলে n ধরে 10 হয় এবং ভেতরের ফাংশনটি ফেরত হয়, যেখানে n আগে থেকেই বাঁধা। তাই add10(3) আর নতুন করে ফাংশন না বানিয়েই ১৩ দেয়। এটাই closure-এর বাস্তব উদাহরণ।
ফাংশন তৈরির ছোট helper বানানোর পাশাপাশি higher-order function ব্যবহার করে ছোট ছোট কাজ জোড়া লাগানো যায়, ফলে কোড পড়া ও পরীক্ষা করা সহজ হয়।
// বারবার একই লজিক লেখা বন্ধ
function doubleAll(numbers) {
return numbers.map(function (n) { return n * 2; });
}
// একই কাজ, ছোট ফাংশন দিয়ে
const double = (n) => n * 2;
function transform(numbers, fn) {
return numbers.map(fn);
}
transform([1, 2, 3], double); // [2, 4, 6]| ধরন | উদাহরণ |
|---|---|
| ফাংশন নেয় | map, filter, reduce, setTimeout |
| ফাংশন ফেরত দেয় | makeAdder, memoize, debounce |
| দুটোই | Array.from(arr, fn), event handler তৈরির factory |
Higher-order function ছাড়া সাধারণ ফাংশন শুধু হিসাবই জানে। এগুলোর ক্ষমতা হলো লজিককে ডেটা থেকে আলাদা করা — তাই একই ফাংশন ভিন্ন ভিন্ন ডেটার উপর ব্যবহার করা যায়, কোড না লিখেই।