টাইপ প্যারামিটার স্কালার জেনেরিক প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ। এটি জেনেরিক ক্লাস এবং ফাংশন তৈরি করতে ব্যবহৃত হয়, যা বিভিন্ন টাইপের জন্য একক কোড বেস ব্যবহার করতে সহায়তা করে। টাইপ প্যারামিটারগুলি মূলত টেমপ্লেট হিসেবে কাজ করে, যেখানে একটি নির্দিষ্ট টাইপ এক্সট্র্যাক্ট করার জন্য সাধারণ কোড ব্যবহার করা হয়।
স্কালায় টাইপ প্যারামিটার ব্যবহারের মাধ্যমে আপনি একটি ডাটা স্ট্রাকচার বা ফাংশন তৈরি করতে পারেন যা একাধিক টাইপের সাথে কাজ করতে সক্ষম।
১. টাইপ প্যারামিটার কী?
টাইপ প্যারামিটার হল একটি প্লেসহোল্ডার টাইপ যা ক্লাস বা ফাংশনে ব্যবহৃত হয়। যখন আপনি একটি টাইপ প্যারামিটার ডিফাইন করেন, তখন এটি সেই ক্লাস বা ফাংশনের জন্য টাইপ যুক্ত করার সুযোগ তৈরি করে।
class Box[T] {
var value: T = _
def setValue(newValue: T): Unit = {
value = newValue
}
def getValue: T = value
}এখানে:
Box[T]একটি ক্লাস যেখানেTটাইপ প্যারামিটার। এটি যেকোনো টাইপ গ্রহণ করতে সক্ষম, যেমনInt,String, বা অন্যান্য টাইপ।Tপ্যারামিটারটিBoxক্লাসের মধ্যে বিভিন্ন ডাটা ধারণ করতে পারে।
২. টাইপ প্যারামিটার ব্যবহার করা (Using Type Parameters)
স্কালায় টাইপ প্যারামিটার ব্যবহার করতে জেনেরিক ক্লাস বা ফাংশন তৈরি করা হয়।
উদাহরণ ১: জেনেরিক ক্লাস
class Box[T](value: T) {
def getValue: T = value
}
val intBox = new Box(42) // Box[Int]
val stringBox = new Box("Hello") // Box[String]
println(intBox.getValue) // Output: 42
println(stringBox.getValue) // Output: Helloএখানে:
Box[T]ক্লাসের জন্যTটাইপ প্যারামিটার ব্যবহার করা হয়েছে, যা বিভিন্ন টাইপের মান ধারণ করতে পারে।intBoxএকটিBox[Int]এবংstringBoxএকটিBox[String]তৈরি করা হয়েছে।
উদাহরণ ২: টাইপ প্যারামিটার সহ ফাংশন
def printValue[T](value: T): Unit = {
println(value)
}
printValue(100) // Output: 100
printValue("Scala") // Output: Scalaএখানে:
printValue[T]ফাংশনটি একটি টাইপ প্যারামিটার গ্রহণ করে এবং সেই টাইপের মান আউটপুট দেয়।
৩. টাইপ প্যারামিটার সীমাবদ্ধতা (Type Parameter Constraints)
স্কালায় আপনি টাইপ প্যারামিটারগুলির জন্য কিছু সীমাবদ্ধতা (constraints) নির্ধারণ করতে পারেন। এর মাধ্যমে আপনি শুধুমাত্র নির্দিষ্ট ধরনের টাইপগুলোই গ্রহণ করতে পারেন।
উদাহরণ: টাইপ প্যারামিটার সীমাবদ্ধতা
class ComparableBox[T <: Comparable[T]](value: T) {
def compare(other: T): Int = value.compareTo(other)
}
val box1 = new ComparableBox(10) // Integer
val box2 = new ComparableBox("Apple") // String
println(box1.compare(20)) // Output: -1 (10 < 20)
println(box2.compare("Banana")) // Output: -1 ("Apple" < "Banana")এখানে:
T <: Comparable[T]টাইপ প্যারামিটারটি Comparable ইন্টারফেস থেকে সাবক্লাস (subclass) হতে হবে, অর্থাৎTটাইপেcompareToমেথড থাকতে হবে।ComparableBoxফাংশনটি যেকোনো টাইপের ইনপুট গ্রহণ করবে যাComparableইন্টারফেস বাস্তবায়ন করে।
৪. টাইপ প্যারামিটার সহ টিউপল (Tuple) এবং কোলেকশন
স্কালায় আপনি টাইপ প্যারামিটার ব্যবহার করে জটিল ডাটা স্ট্রাকচারও তৈরি করতে পারেন, যেমন টিউপল বা কোলেকশন।
উদাহরণ: জেনেরিক কোলেকশন
class Pair[A, B](val first: A, val second: B) {
def getFirst: A = first
def getSecond: B = second
}
val pair = new Pair(1, "One")
println(pair.getFirst) // Output: 1
println(pair.getSecond) // Output: Oneএখানে:
Pair[A, B]একটি জেনেরিক ক্লাস যেখানে দুইটি টাইপ প্যারামিটারAএবংBব্যবহার করা হয়েছে।
৫. টাইপ প্যারামিটার এবং কোলেকশন
কিছু স্কালা কোলেকশন লাইব্রেরি যেমন List, Map, Set, ইত্যাদি জেনেরিক টাইপের উপর কাজ করে।
উদাহরণ: List এবং Map এর সাথে টাইপ প্যারামিটার
val numberList: List[Int] = List(1, 2, 3)
val nameList: List[String] = List("Alice", "Bob")
val numberMap: Map[String, Int] = Map("one" -> 1, "two" -> 2)
println(numberList) // Output: List(1, 2, 3)
println(nameList) // Output: List(Alice, Bob)
println(numberMap) // Output: Map(one -> 1, two -> 2)এখানে:
List[Int]এবংList[String]দুটি আলাদা টাইপের List তৈরি হয়েছে।Map[String, Int]একটিMapতৈরি করা হয়েছে যেখানে String কী এবং Int ভ্যালু।
৬. টাইপ প্যারামিটার এবং ফাংশনাল প্রোগ্রামিং
ফাংশনাল প্রোগ্রামিংয়ে হাইয়ার অর্ডার ফাংশন তৈরি করতে টাইপ প্যারামিটার ব্যবহার করা হয়, যা কোডকে আরও সাধারণ এবং পুনরায় ব্যবহারযোগ্য করে তোলে।
উদাহরণ: হাইয়ার অর্ডার ফাংশন
def mapList[T, U](list: List[T], func: T => U): List[U] = {
list.map(func)
}
val intList = List(1, 2, 3, 4)
val doubled = mapList(intList, (x: Int) => x * 2)
println(doubled) // Output: List(2, 4, 6, 8)এখানে:
mapListএকটি জেনেরিক ফাংশন যা একটিList[T]এবং একটি ফাংশনT => Uগ্রহণ করে এবং একটি নতুনList[U]ফেরত দেয়।
সারাংশ
- টাইপ প্যারামিটার স্কালায় জেনেরিক কোড লেখার জন্য ব্যবহৃত হয়, যেখানে কোডের একাধিক ধরণের ইনপুট বা আউটপুট টাইপ ব্যবহারের সুযোগ থাকে।
- জেনেরিক ক্লাস এবং ফাংশন টাইপ প্যারামিটার ব্যবহার করে সহজে সাধারণ এবং পুনঃব্যবহারযোগ্য কোড তৈরি করা যায়।
- স্কালায় টাইপ প্যারামিটারকে বিভিন্ন টাইপে সীমাবদ্ধ করা সম্ভব, যা কোডের সুরক্ষা এবং স্থিরতা বাড়ায়।
এই ধারণাগুলি স্কালার ফাংশনাল প্রোগ্রামিং এবং জেনেরিক কোড লেখার শক্তি তুলে ধরে।
Read more