স্কালা একটি শক্তিশালী এবং বহুমুখী প্রোগ্রামিং ভাষা, যা মিউটেবল (Mutable) এবং ইমিউটেবল (Immutable) কালেকশন প্রদান করে। এগুলি ডাটা স্ট্রাকচারের বিভিন্ন ধরনের কাজ সম্পাদন করতে ব্যবহৃত হয়। স্কালায় কালেকশনগুলি মূলত এমন ডেটা স্ট্রাকচার যা একাধিক উপাদান সংরক্ষণ করে এবং সেই উপাদানগুলোর সাথে বিভিন্ন ধরনের অপারেশন (যেমন যোগ, মুছে ফেলা, পরিবর্তন করা) করার সুযোগ দেয়।
এখানে মিউটেবল এবং ইমিউটেবল কালেকশনগুলির মধ্যে পার্থক্য এবং ব্যবহারবিধি নিয়ে আলোচনা করা হলো।
১. ইমিউটেবল কালেকশন (Immutable Collections)
ইমিউটেবল কালেকশনগুলি এমন ডেটা স্ট্রাকচার, যেখানে একবার কোনো মান অ্যাসাইন করার পর তা আর পরিবর্তন করা যায় না। যখন আপনি একটি নতুন মান যোগ বা মুছে ফেলেন, তখন আসল কালেকশনটি পরিবর্তিত না হয়ে একটি নতুন কালেকশন তৈরি হয়। স্কালায় ইমিউটেবল কালেকশন ডিফল্ট।
১.১ ইমিউটেবল লিস্ট (Immutable List)
List হলো স্কালার একটি অত্যন্ত জনপ্রিয় ইমিউটেবল ডেটা স্ট্রাকচার। একবার তৈরি হলে এর উপাদানগুলি পরিবর্তন করা যায় না।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5)
// Adding an element to a list creates a new list
val newNumbers = 0 :: numbers // :: is used to prepend an element to the list
println(numbers) // Output: List(1, 2, 3, 4, 5)
println(newNumbers) // Output: List(0, 1, 2, 3, 4, 5)এখানে numbers লিস্টটি অপরিবর্তিত রয়েছে, এবং নতুন লিস্ট newNumbers তৈরি হয়েছে যেখানে 0 উপাদানটি যোগ করা হয়েছে।
১.২ ইমিউটেবল সেট (Immutable Set)
Set হলো একটি কালেকশন যেখানে উপাদানগুলো অর্ডারহীন এবং একই মান একাধিক বার থাকতে পারে না। এটি ইমিউটেবল হলে একবার সেটে উপাদান অ্যাসাইন করা হলে সেটে কোনো পরিবর্তন করা যায় না।
উদাহরণ:
val fruits = Set("Apple", "Banana", "Orange")
// Adding an element to the set creates a new set
val newFruits = fruits + "Grapes"
println(fruits) // Output: Set(Apple, Banana, Orange)
println(newFruits) // Output: Set(Apple, Banana, Orange, Grapes)এখানে fruits সেটটি অপরিবর্তিত রয়েছে, এবং newFruits সেটে একটি নতুন উপাদান (Grapes) যোগ করা হয়েছে।
১.৩ ইমিউটেবল ম্যাপ (Immutable Map)
Map হল একটি কী-ভ্যালু পেয়ার কালেকশন। স্কালার ইমিউটেবল Map এ একবার ডাটা অ্যাসাইন করার পর সেটি পরিবর্তন করা যায় না।
উদাহরণ:
val capitals = Map("India" -> "New Delhi", "USA" -> "Washington D.C.")
// Adding a new key-value pair creates a new map
val newCapitals = capitals + ("Japan" -> "Tokyo")
println(capitals) // Output: Map(India -> New Delhi, USA -> Washington D.C.)
println(newCapitals) // Output: Map(India -> New Delhi, USA -> Washington D.C., Japan -> Tokyo)এখানে, capitals মাপটি অপরিবর্তিত রয়েছে, এবং newCapitals ম্যাপে একটি নতুন কী-ভ্যালু পেয়ার যোগ করা হয়েছে।
২. মিউটেবল কালেকশন (Mutable Collections)
মিউটেবল কালেকশনগুলি এমন ডেটা স্ট্রাকচার, যেখানে একবার একটি মান অ্যাসাইন করার পর সেই মান পরিবর্তন বা মুছে ফেলা সম্ভব। মিউটেবল কালেকশনগুলি সাধারণত বেশি কর্মক্ষম হতে পারে, তবে এর মান পরিবর্তনযোগ্য হওয়ায় সতর্কভাবে ব্যবহার করা প্রয়োজন।
২.১ মিউটেবল লিস্ট (Mutable List)
স্কালায় ListBuffer হল একটি মিউটেবল লিস্ট যা ডাটা ম্যানিপুলেশনে সহজ।
উদাহরণ:
import scala.collection.mutable.ListBuffer
val numbers = ListBuffer(1, 2, 3, 4, 5)
numbers += 6 // Adding an element
numbers -= 2 // Removing an element
println(numbers) // Output: ListBuffer(1, 3, 4, 5, 6)এখানে, numbers লিস্টটি মিউটেবল হওয়ায় উপাদান যোগ এবং মুছে ফেলা সম্ভব।
২.২ মিউটেবল সেট (Mutable Set)
Set ধরনের কালেকশনে স্কালায় HashSet বা LinkedHashSet ব্যবহার করা হয় যা মিউটেবল। এর মধ্যে উপাদান যোগ, মুছে ফেলা এবং অন্যান্য পরিবর্তন সম্ভব।
উদাহরণ:
import scala.collection.mutable.Set
val fruits = Set("Apple", "Banana", "Orange")
fruits += "Grapes" // Adding an element
fruits -= "Banana" // Removing an element
println(fruits) // Output: Set(Apple, Orange, Grapes)এখানে fruits সেটে উপাদান যোগ এবং মুছে ফেলা হয়েছে, যেহেতু এটি মিউটেবল।
২.৩ মিউটেবল ম্যাপ (Mutable Map)
Map ধরনের কালেকশনে মিউটেবল মানের জন্য HashMap বা LinkedHashMap ব্যবহার করা হয়।
উদাহরণ:
import scala.collection.mutable.Map
val capitals = Map("India" -> "New Delhi", "USA" -> "Washington D.C.")
capitals += ("Japan" -> "Tokyo") // Adding a new key-value pair
capitals -= "USA" // Removing a key-value pair
println(capitals) // Output: Map(India -> New Delhi, Japan -> Tokyo)এখানে, capitals ম্যাপটি মিউটেবল হওয়ায় এর মধ্যে নতুন উপাদান যোগ করা এবং পুরানো উপাদান মুছে ফেলা সম্ভব।
৩. ইমিউটেবল এবং মিউটেবল কালেকশনের পার্থক্য
| বৈশিষ্ট্য | ইমিউটেবল কালেকশন | মিউটেবল কালেকশন |
|---|---|---|
| পরিবর্তনযোগ্যতা | একবার তৈরি হলে পরিবর্তন করা যায় না | উপাদান যোগ, মুছে ফেলা বা পরিবর্তন করা যায় |
| পারফরম্যান্স | কিছু ক্ষেত্রে কম পারফর্মেন্স হতে পারে | বেশি কর্মক্ষম হতে পারে, কিন্তু সাবধানে ব্যবহার করতে হয় |
| সুরক্ষা | উচ্চ সুরক্ষা, কারণ একবার তৈরি হলে এটি অপরিবর্তনীয় | কম সুরক্ষা, কারণ এর উপাদান পরিবর্তনযোগ্য |
| ব্যবহার | ফাংশনাল প্রোগ্রামিংয়ের জন্য উপযুক্ত | অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের জন্য উপযুক্ত |
সারাংশ
- ইমিউটেবল কালেকশন হল এমন ডেটা স্ট্রাকচার, যেখানে একবার একটি মান অ্যাসাইন করা হলে তা পরিবর্তন করা যায় না। এটি সুরক্ষিত এবং সতর্কতার সঙ্গে ব্যবহার করা যায়, বিশেষত ফাংশনাল প্রোগ্রামিংয়ে।
- মিউটেবল কালেকশন হল এমন ডেটা স্ট্রাকচার, যা উপাদান পরিবর্তন বা মুছে ফেলার অনুমতি দেয়, তবে এগুলি সাবধানে ব্যবহার করতে হয়, বিশেষত যখন থ্রেডিং বা পারালাল প্রসেসিংয়ের কথা আসে।
ইমিউটেবল এবং মিউটেবল কালেকশন ব্যবহার করার সময় সঠিক টাইপ নির্বাচন করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনার কোডের কর্মক্ষমতা এবং সুরক্ষা প্রভাবিত করতে পারে।
Read more