স্কালায় কেস ক্লাস এবং কেস অবজেক্ট দুটি বিশেষ ধরনের ক্লাস এবং অবজেক্ট, যা মূলত ডাটা হোল্ডিং এবং ডাটা ম্যানিপুলেশন এর জন্য ব্যবহৃত হয়। এগুলি স্কালার ফাংশনাল প্রোগ্রামিং ধারণা অনুসরণ করে এবং অনেক কাজ সহজ করে দেয়। স্কালায় কেস ক্লাস এবং কেস অবজেক্ট ব্যবহার করার ফলে আপনি কম কোডে বেশি কার্যকারিতা পেতে পারেন।
১. কেস ক্লাস (Case Class)
কেস ক্লাস একটি বিশেষ ধরনের ক্লাস যা ডাটা হোল্ডিং এর জন্য ব্যবহৃত হয়। কেস ক্লাস ব্যবহার করার মাধ্যমে আপনি সহজে immutable (অবদলনযোগ্য) ডাটা তৈরি করতে পারেন এবং এর সাথে কিছু বিশেষ ফিচার আসে যা সাধারণ ক্লাসে পাওয়া যায় না, যেমন:
- অটোমেটিক
toStringমেথড। - অটোমেটিক
equalsএবংhashCodeমেথড। - ক্লোনিং (copy) সমর্থন।
- প্যাটার্ন ম্যাচিং এর জন্য উপযুক্ত।
কেস ক্লাস ডেফিনিশন:
case class Person(name: String, age: Int)এখানে:
case classদিয়েPersonনামক একটি কেস ক্লাস তৈরি করা হয়েছে, যেখানে দুটি প্রপার্টিnameএবংageরয়েছে।
কেস ক্লাস ব্যবহার:
object CaseClassExample {
def main(args: Array[String]): Unit = {
// কেস ক্লাস ইনস্ট্যান্স তৈরি
val person1 = Person("Alice", 30)
val person2 = Person("Bob", 25)
// কেস ক্লাসের toString ব্যবহার
println(person1) // Output: Person(Alice,30)
// কেস ক্লাসের copy মেথড ব্যবহার
val person3 = person1.copy(age = 31)
println(person3) // Output: Person(Alice,31)
// equals মেথড
println(person1 == person2) // Output: false
println(person1 == person1) // Output: true
}
}এখানে:
toStringমেথডটি কেস ক্লাসের ইনস্ট্যান্সটি সুস্পষ্টভাবে প্রিন্ট করে।copyমেথডের মাধ্যমে একটি নতুন ইনস্ট্যান্স তৈরি করা হচ্ছে, যেখানে শুধুমাত্রageপরিবর্তন করা হয়েছে।equalsমেথডের মাধ্যমে দুটি কেস ক্লাসের ইনস্ট্যান্সের সমতা পরীক্ষা করা হচ্ছে।
কেস ক্লাসের অন্যান্য ফিচার:
- প্যাটার্ন ম্যাচিং: কেস ক্লাস প্যাটার্ন ম্যাচিংয়ে ব্যবহৃত হয়।
val person = Person("Alice", 30)
person match {
case Person(name, age) => println(s"Name: $name, Age: $age")
}এখানে:
Person(name, age)প্যাটার্ন ম্যাচিং ব্লক ব্যবহার করে কেস ক্লাসের মান এক্সট্র্যাক্ট করা হয়েছে।
২. কেস অবজেক্ট (Case Object)
স্কালায় কেস অবজেক্ট সাধারণত একটি সিঙ্গেলটন (singleton) অবজেক্ট যা প্যাটার্ন ম্যাচিং বা ডেটা হোল্ডিং এর জন্য ব্যবহৃত হয়। কেস অবজেক্ট সাধারণ ক্লাসের মতোই তবে এটি একমাত্র এক ইনস্ট্যান্স থাকে এবং এরও toString, equals এবং hashCode মেথডগুলি অটোমেটিকভাবে তৈরি হয়।
কেস অবজেক্ট ডেফিনিশন:
case object Singletonএখানে:
case objectদিয়েSingletonনামে একটি কেস অবজেক্ট তৈরি করা হয়েছে।
কেস অবজেক্ট ব্যবহার:
object CaseObjectExample {
def main(args: Array[String]): Unit = {
// কেস অবজেক্ট ব্যবহার
println(Singleton) // Output: Singleton
}
}এখানে:
Singletonকেস অবজেক্টের ইনস্ট্যান্সটি একটি একক ইনস্ট্যান্স, এবং তারtoStringমেথডটি স্বয়ংক্রিয়ভাবে"Singleton"রিটার্ন করবে।
কেস অবজেক্টে প্যাটার্ন ম্যাচিং:
object CaseObjectPatternMatching {
def main(args: Array[String]): Unit = {
val obj = Singleton
obj match {
case Singleton => println("Matched the Singleton object")
case _ => println("Didn't match")
}
}
}এখানে:
Singletonকেস অবজেক্টের সাথে প্যাটার্ন ম্যাচিং করা হচ্ছে এবং একটি নির্দিষ্ট ফলাফল রিটার্ন করা হচ্ছে।
৩. কেস ক্লাস এবং কেস অবজেক্টের পার্থক্য
| বৈশিষ্ট্য | কেস ক্লাস (Case Class) | কেস অবজেক্ট (Case Object) |
|---|---|---|
| টাইপ | ডাটা হোল্ডিং এবং ফাংশনাল প্রোগ্রামিং এর জন্য ব্যবহার হয় | সিঙ্গেলটন অবজেক্টের জন্য ব্যবহৃত হয় |
| ইনস্ট্যান্স | একাধিক ইনস্ট্যান্স থাকতে পারে | শুধুমাত্র একটি ইনস্ট্যান্স থাকে |
| প্যাটার্ন ম্যাচিং | প্যাটার্ন ম্যাচিংয়ে ব্যবহৃত হয় | প্যাটার্ন ম্যাচিংয়ে ব্যবহৃত হয় |
| প্রধান ব্যবহার | ডাটা হোল্ডিং এবং ভ্যালু টাইপ ডিফাইন করতে ব্যবহৃত হয় | সিঙ্গেলটন অবজেক্ট এবং স্টেটলেস অপারেশন হ্যান্ডল করার জন্য |
| স্টেট | ইনস্ট্যান্সের স্টেট থাকে | সিঙ্গেল ইনস্ট্যান্স হওয়ায় স্টেট থাকে না |
৪. কেস ক্লাস এবং কেস অবজেক্টের ব্যবহার কোথায় করবেন?
- কেস ক্লাস: যখন আপনার ডেটার সাথে সম্পর্কিত অ্যাকশন এবং ফাংশনালিটি থাকতে হয় এবং আপনি চাইছেন ডাটা হোল্ডিং সহজ এবং ইমিউটেবল হোক, তখন কেস ক্লাস ব্যবহার করা উচিত। যেমন, API রেসপন্স, টিউপল, ভ্যালু টাইপ ইত্যাদি।
- কেস অবজেক্ট: যখন আপনি সিঙ্গেলটন প্যাটার্ন ব্যবহার করতে চান বা কোনো একক ইনস্ট্যান্সে কাজ করতে চান, তখন কেস অবজেক্ট উপযুক্ত।
সারাংশ
- কেস ক্লাস স্কালায় ডাটা হোল্ডিং, ইমিউটেবিলিটি এবং সহজ প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়।
- কেস অবজেক্ট একক ইনস্ট্যান্সে কাজ করার জন্য এবং সিঙ্গেলটন ব্যবস্থাপনার জন্য ব্যবহৃত হয়।
- কেস ক্লাস এবং কেস অবজেক্টের বিশেষ ফিচার যেমন
toString,equals,hashCode, এবং প্যাটার্ন ম্যাচিং, স্কালাকে আরও শক্তিশালী এবং কার্যকরী করে তোলে।
Read more