Extension Methods হল একটি নতুন বৈশিষ্ট্য যা স্কালার 3.0 সংস্করণে যোগ করা হয়েছে, যা একটি বিদ্যমান ক্লাসে নতুন মেথড যোগ করার উপায় প্রদান করে। এই মেথডগুলি ক্লাসের অরিজিনাল কোড পরিবর্তন না করেই নতুন ফাংশনালিটি প্রদান করে। Extension Methods ব্যবহার করে আপনি একটি ক্লাসে নতুন ফাংশন্যালিটি যোগ করতে পারেন, তবে এটি সম্পূর্ণভাবে বিদ্যমান ক্লাসের ভিতরে পরিবর্তন না ঘটায়।
স্কালায় Extension Methods ব্যবহার করার জন্য, extension কীওয়ার্ড ব্যবহার করা হয়। এর মাধ্যমে একটি ক্লাসে নতুন মেথড যোগ করা সম্ভব হয়।
Extension Methods এর উদাহরণ
ধরা যাক, আমাদের একটি ক্লাস Person রয়েছে, এবং আমরা এর সাথে একটি নতুন মেথড যোগ করতে চাই যা ওই ব্যক্তির পূর্ণ নাম রিটার্ন করবে।
object ExtensionMethodExample {
case class Person(firstName: String, lastName: String)
// Extension method for Person class
extension (p: Person) {
def fullName: String = s"${p.firstName} ${p.lastName}"
}
def main(args: Array[String]): Unit = {
val person = Person("John", "Doe")
// Using the extension method
println(person.fullName) // Output: John Doe
}
}এখানে:
extension (p: Person): এটিPersonক্লাসের জন্য একটি এক্সটেনশন মেথড তৈরি করছে।def fullName: এটি নতুন একটি মেথড, যাfirstNameএবংlastNameযোগ করে পূর্ণ নাম রিটার্ন করবে।
কেন Extension Methods ব্যবহৃত হয়?
- বাইরের লাইব্রেরির ক্লাসে ফাংশনালিটি যোগ: Extension Methods ব্যবহার করে আপনি বাইরের লাইব্রেরি বা ফ্রেমওয়ার্কের ক্লাসে নতুন মেথড যোগ করতে পারেন, যা কোডের অর্গিনাল অংশ পরিবর্তন না করেই কাজ করবে।
- ডিক্যাপলিং: এটি ক্লাসের পুনঃব্যবহারযোগ্যতা এবং ক্লাসের স্টাইল পরিবর্তন না করেই অতিরিক্ত ফাংশনালিটি যোগ করতে সহায়তা করে।
- সংক্ষিপ্ত কোড: কোডকে আরো সংক্ষিপ্ত এবং পাঠযোগ্য করে তোলে, বিশেষত যখন আপনি ছোট ছোট ফাংশনালিটি যোগ করতে চান।
Match Types in Scala 3
Match Types স্কালা 3-এ নতুন একটি বৈশিষ্ট্য, যা টাইপ প্যারামিটারগুলির উপর প্যাটার্ন ম্যাচিং করতে সাহায্য করে। এটি মূলত মৌলিক টাইপস এবং টাইপ ক্লাস প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়। Match Types আপনাকে টাইপ স্তরে প্যাটার্ন ম্যাচিং করতে সাহায্য করে এবং টাইপ-ভিত্তিক সিদ্ধান্ত গ্রহণ করতে সহায়তা করে।
Match Types এর উদাহরণ:
ধরা যাক, আমাদের একটি টাইপ ক্লাস তৈরি করতে চাই, যা টাইপের উপর নির্ভর করে দুটি ভিন্ন টাইপ রিটার্ন করবে।
object MatchTypesExample {
// Define a Match Type that returns a different type depending on the input
type MyType[T] = T match {
case Int => String
case String => Int
case _ => T
}
def main(args: Array[String]): Unit = {
val intExample: MyType[Int] = "Hello"
val stringExample: MyType[String] = 42
println(intExample) // Output: Hello (String)
println(stringExample) // Output: 42 (Int)
}
}এখানে:
type MyType[T] = T match { ... }: এটি একটি match type যা T টাইপের উপর ভিত্তি করে নির্ধারণ করবে যে রিটার্ন টাইপ কি হবে। এখানে:- যদি টাইপ Int হয়, তবে রিটার্ন টাইপ হবে String।
- যদি টাইপ String হয়, তবে রিটার্ন টাইপ হবে Int।
- অন্য সব টাইপের জন্য, এটি আসল টাইপই রিটার্ন করবে।
Match Types এর সুবিধা:
- টাইপ-ভিত্তিক লজিক: এটি টাইপ স্তরে লজিক প্রয়োগ করার মাধ্যমে টাইপের মধ্যে সিদ্ধান্ত নিতে সাহায্য করে।
- জেনেরিক ফাংশনালিটি: যখন আপনি টাইপ প্যারামিটার ব্যবহার করে টাইপের উপর ভিত্তি করে বিভিন্ন আচরণ চান, তখন match types খুবই উপকারী।
- সহজ প্যাটার্ন ম্যাচিং: Match types টাইপ প্যাটার্নের ওপর দ্রুত সিদ্ধান্ত নেয়ার সুযোগ দেয়, যা কোডে আরও ফ্লেক্সিবিলিটি এবং নমনীয়তা আনে।
Extension Methods vs Match Types
| বৈশিষ্ট্য | Extension Methods | Match Types |
|---|---|---|
| প্রধান উদ্দেশ্য | বিদ্যমান ক্লাসে নতুন মেথড যোগ করা। | টাইপ প্যারামিটারগুলোর উপর প্যাটার্ন ম্যাচিং করা। |
| কাজ | নতুন ফাংশনালিটি ক্লাসে যোগ করা। | টাইপ স্তরের প্যাটার্ন ম্যাচিংয়ের মাধ্যমে নতুন আচরণ নির্ধারণ করা। |
| ব্যবহার ক্ষেত্র | ক্লাসের ফাংশনালিটি বৃদ্ধি করা, বাইরের ক্লাসে নতুন ফাংশন যোগ করা। | টাইপ-ভিত্তিক সিদ্ধান্ত গ্রহণ এবং টাইপে আচরণ নির্ধারণ করা। |
| কাস্টমাইজেশন | সহজ কাস্টম ফাংশন তৈরি করা। | টাইপ সম্পর্কিত জটিল সিদ্ধান্ত এবং ফাংশনালিটি তৈরি করা। |
| স্কালা সংস্করণ | স্কালা 3.0+ | স্কালা 3.0+ |
সারাংশ
- Extension Methods স্কালায় এমন একটি নতুন ফিচার যা ক্লাসের ভিতরে পরিবর্তন না করে নতুন ফাংশনালিটি যোগ করতে সহায়তা করে, এবং এটি স্কালার ফাংশনাল প্রোগ্রামিং স্টাইলের সাথে খুবই উপযোগী।
- Match Types হল স্কালা 3-এর একটি শক্তিশালী বৈশিষ্ট্য, যা টাইপ প্যারামিটারগুলির উপর প্যাটার্ন ম্যাচিং করার মাধ্যমে টাইপ-ভিত্তিক সিদ্ধান্ত গ্রহণ করতে সাহায্য করে।
এই দুটি বৈশিষ্ট্য কোডে আরও নমনীয়তা এবং ফ্লেক্সিবিলিটি এনে দেয়, বিশেষ করে যখন আপনি টাইপের সাথে কাজ করছেন বা বিদ্যমান কোডে নতুন ফাংশনালিটি যোগ করতে চান।