হায়ার-অর্ডার ফাংশন (Higher-Order Functions) এমন ফাংশন যা একটি বা একাধিক ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে বা একটি ফাংশনকে রিটার্ন করতে পারে। স্কালার ফাংশনাল প্রোগ্রামিং এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, এবং এটি কোডকে আরও পরিষ্কার, সংক্ষিপ্ত এবং পুনরায় ব্যবহারযোগ্য করে তোলে।
স্কালায় হায়ার-অর্ডার ফাংশন ব্যবহার করলে আমরা ফাংশনকে প্রথম শ্রেণির নাগরিক হিসেবে ব্যবহার করতে পারি, যা অন্যান্য ভ্যারিয়েবল বা অবজেক্টের মতো আচরণ করে। এটি স্কালার শক্তিশালী ফাংশনাল প্রোগ্রামিংয়ের অন্যতম বৈশিষ্ট্য।
হায়ার-অর্ডার ফাংশনের উদাহরণ
১. ফাংশন গ্রহণকারী হায়ার-অর্ডার ফাংশন
স্কালায় আপনি ফাংশনকে আর্গুমেন্ট হিসেবে পাস করতে পারেন। উদাহরণস্বরূপ, একটি হায়ার-অর্ডার ফাংশন যা একটি ফাংশন গ্রহণ করে এবং তার সাথে কিছু কাজ করে:
object HigherOrderFunctionExample {
def applyFunction(f: Int => Int, x: Int): Int = {
f(x)
}
def main(args: Array[String]): Unit = {
val result = applyFunction(x => x * x, 5) // Squaring function
println(result) // Output: 25
}
}এখানে:
applyFunctionএকটি হায়ার-অর্ডার ফাংশন যা একটি ফাংশনfএবং একটি মানxগ্রহণ করে এবংf(x)রিটার্ন করে।x => x * xএকটি ল্যাম্বডা এক্সপ্রেশন যাxএর বর্গ (square) বের করে।
২. ফাংশন রিটার্নকারী হায়ার-অর্ডার ফাংশন
স্কালায় একটি ফাংশন অন্য একটি ফাংশন রিটার্ন করতে পারে। এটি একটি প্রচলিত ব্যবহার যেখানে আমরা একটি ফাংশন তৈরি করি যা একটি ফাংশন তৈরি করে।
object HigherOrderFunctionReturn {
def multiplyBy(factor: Int): Int => Int = {
(x: Int) => x * factor
}
def main(args: Array[String]): Unit = {
val multiplyBy2 = multiplyBy(2) // Returns a function that multiplies by 2
println(multiplyBy2(5)) // Output: 10
val multiplyBy3 = multiplyBy(3) // Returns a function that multiplies by 3
println(multiplyBy3(5)) // Output: 15
}
}এখানে:
multiplyByএকটি হায়ার-অর্ডার ফাংশন যা একটিfactorআর্গুমেন্ট গ্রহণ করে এবং একটি নতুন ফাংশন রিটার্ন করে, যা সংখ্যাকেfactorদিয়ে গুণ করে।multiplyBy(2)একটি ফাংশন রিটার্ন করে যা ইনপুট মানকে ২ দিয়ে গুণ করে।
৩. হায়ার-অর্ডার ফাংশন ব্যবহার করে কলব্যাক
হায়ার-অর্ডার ফাংশন সাধারণত কলব্যাক ফাংশন হিসাবে ব্যবহৃত হয়। একটি উদাহরণে, আমরা একটি ফাংশন তৈরি করতে পারি যা একটি ফাংশনকে কলব্যাক হিসাবে ব্যবহার করে:
object CallbackExample {
def processData(data: List[Int], operation: Int => Int): List[Int] = {
data.map(operation)
}
def main(args: Array[String]): Unit = {
val data = List(1, 2, 3, 4, 5)
// Passing a callback function that squares each number
val squaredData = processData(data, x => x * x)
println(squaredData) // Output: List(1, 4, 9, 16, 25)
// Passing a callback function that doubles each number
val doubledData = processData(data, x => x * 2)
println(doubledData) // Output: List(2, 4, 6, 8, 10)
}
}এখানে:
processDataএকটি হায়ার-অর্ডার ফাংশন যা একটি ডাটা তালিকা এবং একটি অপারেশন ফাংশন গ্রহণ করে।operationহল একটি ফাংশন যাIntআর্গুমেন্ট গ্রহণ করে এবংIntরিটার্ন করে, এবং এটিdata.mapএর মাধ্যমে প্রতিটি উপাদানের উপর প্রয়োগ করা হয়।
৪. হায়ার-অর্ডার ফাংশনের সাথে লিস্ট এবং মাপ (Map) ব্যবহার
এখন, আমরা একটি লিস্টের উপাদানগুলির উপর একটি ফাংশন প্রয়োগ করতে map ফাংশন ব্যবহার করতে পারি, যা একটি হায়ার-অর্ডার ফাংশন:
object HigherOrderWithMap {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4, 5)
// Applying a higher-order function (multiplying each element by 2)
val doubledNumbers = numbers.map(x => x * 2)
println(doubledNumbers) // Output: List(2, 4, 6, 8, 10)
// Using a higher-order function for filtering even numbers
val evenNumbers = numbers.filter(x => x % 2 == 0)
println(evenNumbers) // Output: List(2, 4)
}
}এখানে:
mapএবংfilterফাংশন উভয়ই হায়ার-অর্ডার ফাংশন কারণ তারা একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে এবং একটি নতুন কন্টেইনার রিটার্ন করে।
সারাংশ
স্কালায় হায়ার-অর্ডার ফাংশন হল এমন ফাংশন যা:
- একটি বা একাধিক ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে, অথবা
- একটি ফাংশনকে রিটার্ন করতে পারে।
এগুলি স্কালার ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ দিক এবং কোডকে আরও পরিষ্কার, পুনঃব্যবহারযোগ্য ও দক্ষ করে তোলে। স্কালায় map, filter, reduce ইত্যাদি ফাংশনগুলি সাধারণত হায়ার-অর্ডার ফাংশনের উদাহরণ।
Read more