স্কালাতে Custom Collections তৈরি করা হলে, আপনি নিজের প্রয়োজন অনুসারে একটি কালেকশন টাইপ তৈরি করতে পারেন যা সাধারণ কালেকশনগুলো (যেমন List, Set, Map ইত্যাদি) থেকে আলাদা এবং বিশেষ বৈশিষ্ট্যসম্পন্ন হয়। Custom Collections স্কালার Collection লাইব্রেরির একটি কাস্টম ইমপ্লিমেন্টেশন, যা ডেটা স্ট্রাকচার এবং অপারেশনগুলির জন্য ফাংশনাল প্রোগ্রামিং সুবিধা প্রদান করে।
Custom Collection তৈরি করার জন্য মূল ধারণা
- কলেকশন ট্রেইট (Collection Trait) ইমপ্লিমেন্ট করা
- চিরন্তন বৈশিষ্ট্য (Immutable) বা পরিবর্তনশীল বৈশিষ্ট্য (Mutable) কাস্টম কালেকশন তৈরি করা
- কাস্টম অপারেশন সমর্থন করা, যেমন
map,filter,flatMap,fold,reduceইত্যাদি।
স্কালাতে কাস্টম কালেকশন তৈরি করতে আপনাকে Collection ট্রেইটের প্রয়োজন হয়, এবং এর মধ্যে পদ্ধতিগুলি বা অপারেশনগুলি ইমপ্লিমেন্ট করতে হয়।
কাস্টম কালেকশন তৈরি করার উদাহরণ
১. কাস্টম কালেকশন টাইপ তৈরি (Immutable)
// Custom collection class implementation
class MyCollection[T](val elements: List[T]) extends Iterable[T] {
// Implementing the iterator method
def iterator: Iterator[T] = elements.iterator
// Custom map method for transforming the elements
def map[B](f: T => B): MyCollection[B] = {
new MyCollection[B](elements.map(f))
}
// Custom filter method for filtering elements
def filter(p: T => Boolean): MyCollection[T] = {
new MyCollection[T](elements.filter(p))
}
// Custom fold method for reducing the elements
def foldLeft[B](z: B)(op: (B, T) => B): B = {
elements.foldLeft(z)(op)
}
}
// Creating a custom collection instance
val myCollection = new MyCollection[Int](List(1, 2, 3, 4, 5))
// Using custom map method to double the values
val doubled = myCollection.map(_ * 2)
println(doubled.elements) // List(2, 4, 6, 8, 10)
// Using custom filter method to filter even numbers
val evenNumbers = myCollection.filter(_ % 2 == 0)
println(evenNumbers.elements) // List(2, 4)
val sum = myCollection.foldLeft(0)(_ + _)
println(sum) // 15এখানে, MyCollection একটি কাস্টম কালেকশন ক্লাস তৈরি করা হয়েছে, যা Iterable ট্রেইট ইমপ্লিমেন্ট করেছে। এর মধ্যে map, filter, এবং foldLeft এর মতো সাধারণ ফাংশনাল অপারেশনগুলো কাস্টমভাবে ইমপ্লিমেন্ট করা হয়েছে।
২. কাস্টম কালেকশন টাইপ তৈরি (Mutable)
যদি আপনি একটি পরিবর্তনশীল (Mutable) কাস্টম কালেকশন তৈরি করতে চান, তবে আপনাকে আরও কিছু মেথড যেমন +=, -= ইমপ্লিমেন্ট করতে হবে।
import scala.collection.mutable
// Mutable Custom collection class
class MyMutableCollection[T](var elements: List[T]) {
// Add an element to the collection
def add(element: T): Unit = {
elements = element :: elements
}
// Remove an element from the collection
def remove(element: T): Unit = {
elements = elements.filterNot(_ == element)
}
// Custom map method for transforming elements
def map[B](f: T => B): List[B] = {
elements.map(f)
}
}
// Creating a mutable custom collection instance
val myMutableCollection = new MyMutableCollection[Int](List(1, 2, 3))
// Adding an element
myMutableCollection.add(4)
println(myMutableCollection.elements) // List(4, 1, 2, 3)
// Removing an element
myMutableCollection.remove(2)
println(myMutableCollection.elements) // List(4, 1, 3)
// Using custom map method to square the values
val squared = myMutableCollection.map(x => x * x)
println(squared) // List(16, 1, 9)এখানে, MyMutableCollection একটি কাস্টম মিউটেবল কালেকশন তৈরি করা হয়েছে, যা এক্সটার্নাল অপারেশন যেমন এলিমেন্ট যোগ এবং এলিমেন্ট মুছে ফেলা সমর্থন করে। এর map মেথডের সাহায্যে উপাদানগুলির উপর ট্রান্সফরমেশন প্রয়োগ করা হয়েছে।
কাস্টম কালেকশনের সুবিধা
- নির্দিষ্ট ডেটা স্ট্রাকচার তৈরি:
কাস্টম কালেকশনগুলি আপনার প্রয়োজনীয়তা অনুযায়ী বিশেষ ধরনের ডেটা স্ট্রাকচার তৈরি করতে সাহায্য করে। - ফাংশনাল প্রোগ্রামিং সমর্থন:
কাস্টম কালেকশনে ফাংশনাল অপারেশন যেমনmap,filter,fold,reduceসমর্থন করে ডেটার উপর ট্রান্সফর্মেশন বা রিডাকশন কার্যকরীভাবে করা যায়। - পরিবর্তনশীল বা অপরিবর্তনীয় (Mutable or Immutable):
আপনি ইচ্ছামতো পরিবর্তনশীল বা অপরিবর্তনীয় কাস্টম কালেকশন তৈরি করতে পারেন। - অ্যাপ্লিকেশন লজিক:
কাস্টম কালেকশনে আপনি অ্যাপ্লিকেশন লজিক যেমন এলিমেন্ট যোগ, মুছে ফেলা, নতুন অপারেশন ইমপ্লিমেন্ট ইত্যাদি সহজে অন্তর্ভুক্ত করতে পারেন।
উপসংহার
Custom Collections আপনাকে স্কালাতে একটি নতুন ধরনের কালেকশন তৈরি করার সুযোগ দেয়, যা আপনার নির্দিষ্ট প্রয়োজনীয়তা অনুসারে ডিজাইন করা হয়। আপনি চাইলে Immutable বা Mutable কাস্টম কালেকশন তৈরি করতে পারেন এবং এতে নিজের প্রয়োজনীয় ফাংশনাল অপারেশন (যেমন map, filter, fold) ইমপ্লিমেন্ট করতে পারেন। এটি স্কালার ফাংশনাল প্রোগ্রামিং সুবিধাগুলির সাথে ডেটা স্ট্রাকচার ডিজাইনে আরও নমনীয়তা এবং শক্তি প্রদান করে।
Read more