স্কালা টাইপ প্যারামিটার

স্কালা টাইপ সিস্টেম এবং টাইপ ক্লাস - স্কালা প্রোগ্রামিং (Scala Programming) - Computer Programming

193

টাইপ প্যারামিটার স্কালার জেনেরিক প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ। এটি জেনেরিক ক্লাস এবং ফাংশন তৈরি করতে ব্যবহৃত হয়, যা বিভিন্ন টাইপের জন্য একক কোড বেস ব্যবহার করতে সহায়তা করে। টাইপ প্যারামিটারগুলি মূলত টেমপ্লেট হিসেবে কাজ করে, যেখানে একটি নির্দিষ্ট টাইপ এক্সট্র্যাক্ট করার জন্য সাধারণ কোড ব্যবহার করা হয়।

স্কালায় টাইপ প্যারামিটার ব্যবহারের মাধ্যমে আপনি একটি ডাটা স্ট্রাকচার বা ফাংশন তৈরি করতে পারেন যা একাধিক টাইপের সাথে কাজ করতে সক্ষম।


১. টাইপ প্যারামিটার কী?

টাইপ প্যারামিটার হল একটি প্লেসহোল্ডার টাইপ যা ক্লাস বা ফাংশনে ব্যবহৃত হয়। যখন আপনি একটি টাইপ প্যারামিটার ডিফাইন করেন, তখন এটি সেই ক্লাস বা ফাংশনের জন্য টাইপ যুক্ত করার সুযোগ তৈরি করে।

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] ফেরত দেয়।

সারাংশ

  • টাইপ প্যারামিটার স্কালায় জেনেরিক কোড লেখার জন্য ব্যবহৃত হয়, যেখানে কোডের একাধিক ধরণের ইনপুট বা আউটপুট টাইপ ব্যবহারের সুযোগ থাকে।
  • জেনেরিক ক্লাস এবং ফাংশন টাইপ প্যারামিটার ব্যবহার করে সহজে সাধারণ এবং পুনঃব্যবহারযোগ্য কোড তৈরি করা যায়।
  • স্কালায় টাইপ প্যারামিটারকে বিভিন্ন টাইপে সীমাবদ্ধ করা সম্ভব, যা কোডের সুরক্ষা এবং স্থিরতা বাড়ায়।

এই ধারণাগুলি স্কালার ফাংশনাল প্রোগ্রামিং এবং জেনেরিক কোড লেখার শক্তি তুলে ধরে।

Content added By
Promotion

Are you sure to start over?

Loading...