Higher-order functions (HOFs) হলো এমন ফাংশন যা:
- এক বা একাধিক ফাংশনকে আর্গুমেন্ট হিসেবে নেয়,
- অথবা একটি ফাংশনকে রিটার্ন করে।
এগুলি JavaScript-এর একটি শক্তিশালী কনসেপ্ট এবং ES6 এর নতুন ফিচারগুলি যেমন Arrow Functions এবং Map/Filter/Reduce ইত্যাদির মাধ্যমে আরও সহজ ও প্রাঞ্জলভাবে ব্যবহার করা সম্ভব হয়েছে। Higher-order functions অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং, ক্যালবেক (callback) এবং কম্পোজিশন (composition) এর ক্ষেত্রে খুবই উপকারী।
Higher-order Function এর উদাহরণ
1. Function as Argument (ফাংশন আর্গুমেন্ট হিসেবে ব্যবহার)
একটি সাধারণ উদাহরণ হিসেবে আমরা একটি ফাংশন দেখব, যা অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে নেয়।
function greet(name, callback) {
console.log("Hello, " + name);
callback();
}
function sayGoodbye() {
console.log("Goodbye!");
}
greet("Alice", sayGoodbye);
// Output:
// Hello, Alice
// Goodbye!
এখানে greet একটি higher-order function কারণ এটি sayGoodbye ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করছে।
2. Return Function (ফাংশন রিটার্ন করা)
এটি এমন একটি উদাহরণ যেখানে একটি ফাংশন অন্য একটি ফাংশন রিটার্ন করে।
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
const double = multiplier(2);
console.log(double(5)); // 10
const triple = multiplier(3);
console.log(triple(5)); // 15
এখানে, multiplier ফাংশন একটি higher-order function যা একটি ফাংশন রিটার্ন করছে। আমরা পরে double এবং triple ফাংশন তৈরি করেছি, যেগুলি বিভিন্ন গুনফল দেয়।
ES6 Higher-order Functions Examples
ES6 এ map(), filter(), এবং reduce() ফাংশনগুলোর মাধ্যমে higher-order functions এর ব্যবহার আরও জনপ্রিয় হয়েছে। এই ফাংশনগুলো অ্যারে অপারেশনগুলো সহজ করে তোলে।
1. map() Method
map() একটি higher-order function, যা একটি আর্গুমেন্ট হিসেবে কলব্যাক ফাংশন নেয় এবং প্রতিটি উপাদানকে প্রসেস করে একটি নতুন অ্যারে রিটার্ন করে।
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(num => num * 2);
console.log(doubledNumbers); // [2, 4, 6, 8, 10]
এখানে map() এর মাধ্যমে আমরা প্রতিটি সংখ্যাকে গুণ করে একটি নতুন অ্যারে তৈরি করেছি।
2. filter() Method
filter() method একটি higher-order function, যা একটি callback ফাংশন নেয় এবং যে সমস্ত উপাদান শর্ত পূরণ করে তাদের একটি নতুন অ্যারে রিটার্ন করে।
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
এখানে filter() ফাংশন ব্যবহার করে আমরা শুধু even numbers (যারা ২ দিয়ে বিভাজ্য) বের করেছি।
3. reduce() Method
reduce() method একটি higher-order function, যা একটি accumulator তৈরি করে এবং এটি একটি একক মানে রিডিউস করে (যেমন: যোগফল, গুণফল, সর্বোচ্চ মান ইত্যাদি)।
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 15
এখানে reduce() ফাংশন ব্যবহার করে আমরা সব সংখ্যা যোগফল বের করেছি।
Higher-order Functions এর সুবিধা
- Code Reusability: Higher-order functions ফাংশনগুলোকে পুনঃব্যবহারযোগ্য এবং কমপোজেবল (composable) করে তোলে, যার মাধ্যমে কোডের পুণঃব্যবহার সম্ভব হয়।
- Declarative Programming: Higher-order functions প্রোগ্রামিংকে declarative বানায়, অর্থাৎ আমরা কীভাবে একটি কাজ করতে হবে তা নয়, বরং কেবল কী করতে হবে তা লিখি।
- Clean Code: Callback বা কমপ্লেক্স লজিক এক্সপ্রেশনগুলির পরিবর্তে সাধারণভাবে কোডটিকে পরিষ্কার, ছোট এবং আরও পাঠযোগ্য করা সম্ভব হয়।
Conclusion
Higher-order functions ES6 এ একটি শক্তিশালী কনসেপ্ট হিসেবে আসে, যা কোডের পুনঃব্যবহারযোগ্যতা, কার্যকারিতা এবং পরিষ্কারতা উন্নত করতে সহায়ক। ES6 এ map(), filter(), এবং reduce() এর মতো ফাংশনগুলির মাধ্যমে এর ব্যবহার আরও জনপ্রিয় এবং সুবিধাজনক হয়ে উঠেছে। Higher-order functions অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং, ফাংশনাল প্রোগ্রামিং এবং কোড কমপোজিশন সহজ করে তোলে।
Read more