স্কালা একটি ফাংশনাল প্রোগ্রামিং ভাষা, যা ফাংশনকে প্রথম শ্রেণির নাগরিক হিসেবে ব্যবহার করে। ফাংশনগুলি স্কালায় খুবই শক্তিশালী এবং সহজে ব্যবহৃত হতে পারে। এই অধ্যায়ে, আমরা স্কালার ফাংশন ডেফিনিশন এবং টাইপ সম্পর্কে বিস্তারিতভাবে আলোচনা করব।
১. স্কালা ফাংশন ডেফিনিশন (Function Definition)
স্কালায় ফাংশন ডিফাইন করা হয় def কিওয়ার্ড ব্যবহার করে। ফাংশনের মধ্যে ইনপুট আর্গুমেন্ট (parameters) এবং আউটপুট রিটার্ন টাইপ (return type) উল্লেখ করা হয়।
সাধারণ ফাংশন ডেফিনিশন:
def functionName(parameter1: Type1, parameter2: Type2): ReturnType = {
// function body
return someValue
}উদাহরণ:
def add(a: Int, b: Int): Int = {
return a + b
}
val result = add(5, 3)
println(result) // Output: 8এখানে:
addএকটি ফাংশন, যা দুটিIntটাইপের প্যারামিটার গ্রহণ করে এবং একটিIntরিটার্ন করে।aএবংbহল প্যারামিটার, এবংIntরিটার্ন টাইপ।return a + bদ্বারা যোগফল রিটার্ন করা হচ্ছে।
২. ফাংশন টাইপ (Function Types)
স্কালায় ফাংশন টাইপের ধারণা খুবই গুরুত্বপূর্ণ, বিশেষত যখন আপনি ফাংশনকে এক্সপ্রেশন বা প্যারামিটার হিসেবে ব্যবহার করেন। ফাংশন টাইপ সাধারণভাবে একটি আর্গুমেন্টের টাইপ এবং রিটার্ন টাইপের সংমিশ্রণ।
ফাংশন টাইপের সিনট্যাক্স:
(parameter1: Type1, parameter2: Type2) => ReturnTypeউদাহরণ:
val add = (a: Int, b: Int) => a + b
println(add(5, 3)) // Output: 8এখানে:
addহল একটি ফাংশন যা দুটিIntইনপুট নেয় এবং তাদের যোগফল রিটার্ন করে।- ফাংশনের টাইপের সিনট্যাক্স:
(Int, Int) => Int।
৩. ফাংশন আর্গুমেন্টের টাইপ নির্ধারণ (Function Argument Types)
ফাংশনে প্যারামিটারগুলির টাইপ স্পষ্টভাবে উল্লেখ করতে হবে, যা স্কালায় টাইপ সেফটি (type safety) বজায় রাখে।
উদাহরণ:
def multiply(a: Int, b: Int): Int = {
a * b
}
val result = multiply(4, 5)
println(result) // Output: 20এখানে:
aএবংbহল ইনপুট প্যারামিটার, এবং তাদের টাইপ হলInt।- ফাংশনটির রিটার্ন টাইপ
Int।
৪. ফাংশন আর্গুমেন্টের ডিফল্ট মান (Default Arguments)
স্কালায় ফাংশন আর্গুমেন্টের জন্য ডিফল্ট মানও প্রদান করা যায়। এর মাধ্যমে আপনি কিছু প্যারামিটার না দিলেও ফাংশনটি সঠিকভাবে কাজ করবে।
উদাহরণ:
def greet(name: String, greeting: String = "Hello"): Unit = {
println(s"$greeting, $name!")
}
greet("Alice") // Output: Hello, Alice!
greet("Bob", "Goodbye") // Output: Goodbye, Bob!এখানে:
greetingপ্যারামিটারটির একটি ডিফল্ট মান"Hello"দেওয়া হয়েছে।- যখন
greet("Alice")কল করা হয়েছে, তখন ডিফল্ট মান"Hello"ব্যবহার করা হয়েছে।
৫. ভ্যারিএবল আর্গুমেন্ট (Variable Arguments)
ফাংশনে আপনি ভ্যারিএবল (অসংখ্য) আর্গুমেন্ট গ্রহণ করতে পারেন, যার জন্য স্কালা varargs ব্যবহার করে। এটি ফাংশনে একাধিক আর্গুমেন্ট পাস করার সুবিধা দেয়।
উদাহরণ:
def sum(numbers: Int*): Int = {
numbers.sum
}
println(sum(1, 2, 3, 4)) // Output: 10
println(sum(5, 10)) // Output: 15এখানে:
numbers: Int*দ্বারা ভ্যারিএবল সংখ্যকIntপ্যারামিটার গ্রহণ করা হচ্ছে।
৬. হাইয়ার অর্ডার ফাংশন (Higher-Order Functions)
স্কালায় ফাংশন উচ্চতর অর্ডারের হতে পারে, অর্থাৎ ফাংশন অন্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে বা রিটার্ন করতে পারে।
উদাহরণ:
def applyFunction(f: Int => Int, x: Int): Int = {
f(x)
}
val result = applyFunction(x => x * 2, 4)
println(result) // Output: 8এখানে:
applyFunctionএকটি হাইয়ার অর্ডার ফাংশন যা অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করছে।x => x * 2একটি ফাংশন যাxএর দ্বিগুণ করে।
৭. প্যারামিটার ছাড়া ফাংশন (Functions Without Parameters)
স্কালায় এমন ফাংশনও তৈরি করা যায় যা কোনো প্যারামিটার নাও নিতে পারে। এমন ফাংশনগুলো সাধারণত কাজ শেষ করে কোনো রিটার্ন মান প্রদান করে।
উদাহরণ:
def sayHello(): Unit = {
println("Hello, Scala!")
}
sayHello() // Output: Hello, Scala!এখানে:
sayHelloকোনো প্যারামিটার ছাড়াই একটিUnitরিটার্ন করে এবং কনসোলে "Hello, Scala!" প্রিন্ট করে।
৮. ফাংশন টাইপের উদাহরণ (Function Type Example)
স্কালায় ফাংশনের টাইপের সাহায্যে আপনি নির্ধারণ করতে পারেন একটি ফাংশন কীভাবে কাজ করবে।
val multiply: (Int, Int) => Int = (a, b) => a * b
val result = multiply(3, 4)
println(result) // Output: 12এখানে:
multiplyএকটি ফাংশন যা দুটিIntটাইপের ইনপুট নেয় এবং একটিIntরিটার্ন করে।
সারাংশ
স্কালায় ফাংশন ব্যবহারের ধারণা খুবই শক্তিশালী এবং নমনীয়। স্কালা ফাংশনাল প্রোগ্রামিংয়ের সুবিধা প্রদান করে এবং ফাংশনগুলোকে প্রথম শ্রেণির নাগরিক হিসেবে ব্যবহার করা যায়। স্কালার ফাংশন ডেফিনিশন এবং টাইপ ব্যবহারে উচ্চতর সুরক্ষা এবং কার্যকারিতা পাওয়া যায়, যা সফটওয়্যার ডেভেলপমেন্টে বেশ সহায়ক।
Read more