স্কালা প্রোগ্রামিং ভাষায় কালেকশন API একটি অত্যন্ত শক্তিশালী বৈশিষ্ট্য যা ডাটা স্ট্রাকচার (যেমন লিস্ট, সেট, ম্যাপ, ভেক্টর, স্ট্রিম ইত্যাদি) ব্যবস্থাপনা, প্রসেসিং এবং অপারেশন করার জন্য ব্যবহৃত হয়। স্কালার কালেকশন API তে অনেক ধরনের ফাংশনাল এবং ইমিউটেবল কালেকশন রয়েছে যা খুবই কার্যকরী এবং স্কালার ফাংশনাল প্রোগ্রামিং কৌশলগুলির সাথে পুরোপুরি সঙ্গতিপূর্ণ।
স্কালা কালেকশন API Overview
স্কালার কালেকশন API দুটি প্রধান শ্রেণিতে বিভক্ত:
- Mutable Collections: যেগুলি মিউটেবল, অর্থাৎ এগুলির উপাদান পরিবর্তন করা যায়।
- Immutable Collections: যেগুলি ইমিউটেবল, অর্থাৎ একবার তৈরি হলে তাদের উপাদান পরিবর্তন করা যায় না।
স্কালা কালেকশন API ফাংশনাল প্রোগ্রামিংয়ের সুবিধা যেমন হাইয়ার অর্ডার ফাংশন (map, flatMap, filter, reduce ইত্যাদি) এবং ইমিউটেবল ডাটা স্ট্রাকচার প্রদান করে যা প্রোগ্রামিংকে আরও সুন্দর, কার্যকরী এবং দ্রুততর করে তোলে।
১. Immutable Collections
ইমিউটেবল কালেকশনগুলি একবার তৈরি হলে তাদের উপাদান পরিবর্তন করা যায় না। যখন আপনি একটি ইমিউটেবল কালেকশন পরিবর্তন করার চেষ্টা করবেন, তখন এটি নতুন একটি কালেকশন রিটার্ন করবে। স্কালায় ইমিউটেবল কালেকশনগুলির মধ্যে রয়েছে:
- List
- Set
- Map
- Vector
- Stream
১.১ List (ইমিউটেবল)
স্কালার List একটি অর্ডারড কালেকশন যা ডুপ্লিকেট উপাদান ধারণ করতে পারে।
val list = List(1, 2, 3, 4, 5)
println(list.map(x => x * 2)) // Output: List(2, 4, 6, 8, 10)এখানে:
mapফাংশনটি প্রতিটি উপাদানকে দ্বিগুণ করছে।
১.২ Set (ইমিউটেবল)
Set একটি কালেকশন যা অর্ডার্ড নয় এবং এতে ডুপ্লিকেট উপাদান থাকে না।
val set = Set(1, 2, 3, 4, 4, 5)
println(set) // Output: Set(1, 2, 3, 4, 5)এখানে:
- ডুপ্লিকেট উপাদানগুলো কেটে ফেলা হয়েছে।
১.৩ Map (ইমিউটেবল)
Map হল একটি কালেকশন যা কী-মান পেয়ার ধারণ করে। এটি সাধারণত ডিকশনারি বা ম্যাপের মতো কাজ করে।
val map = Map("a" -> 1, "b" -> 2, "c" -> 3)
println(map.keys) // Output: Set(a, b, c)
println(map.values) // Output: Iterable(1, 2, 3)এখানে:
keysফাংশনটি ম্যাপের সমস্ত কী (key) রিটার্ন করবে।valuesফাংশনটি ম্যাপের সমস্ত মান (values) রিটার্ন করবে।
১.৪ Vector (ইমিউটেবল)
Vector হল একটি দ্রুত অ্যাক্সেসযোগ্য এবং ইমিউটেবল কালেকশন।
val vector = Vector(1, 2, 3, 4)
println(vector) // Output: Vector(1, 2, 3, 4)এটি বড় ডাটা সেটের জন্য উপযুক্ত, যেখানে দ্রুত অ্যাক্সেস এবং পরিবর্তন দরকার।
১.৫ Stream (Lazy Evaluation)
Stream একটি বিশেষ ধরনের কালেকশন যা lazy evaluation ব্যবহার করে। এর মানে হল যে, যখনই কোনো উপাদান প্রয়োজন হয়, তখনই তা হিসাব করা হবে।
val stream = Stream.from(1)
println(stream.take(5).toList) // Output: List(1, 2, 3, 4, 5)এখানে:
Stream.from(1)একটি ইনফিনিট স্ট্রিম তৈরি করবে, এবংtake(5)প্রথম ৫টি উপাদান নেবে।
২. Mutable Collections
Mutable Collections-এ উপাদান পরিবর্তন বা ম্যানিপুলেট করা যায়। এই কালেকশনগুলির মধ্যে রয়েছে:
- ListBuffer
- ArrayBuffer
- HashSet
- HashMap
২.১ ListBuffer (Mutable)
এটি একটি পরিবর্তনযোগ্য List যা নতুন উপাদান যোগ বা মুছে ফেলা সম্ভব।
import scala.collection.mutable.ListBuffer
val listBuffer = ListBuffer(1, 2, 3, 4)
listBuffer += 5
println(listBuffer) // Output: ListBuffer(1, 2, 3, 4, 5)এখানে:
+=ব্যবহার করে নতুন উপাদান যুক্ত করা হচ্ছে।
২.২ ArrayBuffer (Mutable)
এটি একটি পরিবর্তনযোগ্য অ্যারে।
import scala.collection.mutable.ArrayBuffer
val arrayBuffer = ArrayBuffer(1, 2, 3)
arrayBuffer.append(4)
println(arrayBuffer) // Output: ArrayBuffer(1, 2, 3, 4)এখানে:
appendফাংশনটি নতুন উপাদান অ্যারে বাফারে যুক্ত করেছে।
২.৩ HashSet (Mutable)
HashSet হল একটি পরিবর্তনযোগ্য সেট, যেখানে উপাদানগুলি অর্ডারড না এবং ডুপ্লিকেট থাকে না।
import scala.collection.mutable.HashSet
val hashSet = HashSet(1, 2, 3)
hashSet += 4
println(hashSet) // Output: HashSet(1, 2, 3, 4)এখানে:
+=ফাংশনটি নতুন উপাদান যুক্ত করছে।
২.৪ HashMap (Mutable)
HashMap একটি পরিবর্তনযোগ্য ম্যাপ যা কী-মান পেয়ার ধারণ করে।
import scala.collection.mutable.HashMap
val hashMap = HashMap("a" -> 1, "b" -> 2)
hashMap("c") = 3
println(hashMap) // Output: HashMap(a -> 1, b -> 2, c -> 3)এখানে:
("c") = 3সিনট্যাক্সটি একটি নতুন কী-মান পেয়ার যোগ করেছে।
৩. কিছু গুরুত্বপূর্ণ কালেকশন ফাংশন
স্কালার কালেকশনগুলির ওপর অনেক শক্তিশালী ফাংশনাল অপারেশন করা যায়, যেমন:
- map: কালেকশনের প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে নতুন একটি কালেকশন রিটার্ন করা।
- filter: শর্তের ভিত্তিতে উপাদানগুলো ফিল্টার করা।
- reduce: একটি একক মানে উপাদানগুলো কম্পাইল করা।
- flatMap: একটি কালেকশনের প্রতি উপাদান থেকে একাধিক উপাদান তৈরি করা।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5)
// map উদাহরণ
val doubled = numbers.map(x => x * 2)
println(doubled) // Output: List(2, 4, 6, 8, 10)
// filter উদাহরণ
val evenNumbers = numbers.filter(x => x % 2 == 0)
println(evenNumbers) // Output: List(2, 4)
// reduce উদাহরণ
val sum = numbers.reduce((a, b) => a + b)
println(sum) // Output: 15সারাংশ
স্কালা কালেকশন API অত্যন্ত শক্তিশালী এবং অনেক ধরনের ইমিউটেবল এবং মিউটেবল ডাটা স্ট্রাকচার সরবরাহ করে, যা ডেটার প্রক্রিয়াকরণ, ফিল্টারিং, এবং পরিবর্তন করার জন্য ব্যবহৃত হয়। স্কালার কালেকশন API তে ফাংশনাল প্রোগ্রামিং কৌশল যেমন map, filter, reduce, flatMap ইত্যাদি ব্যবহার করা যায়, যা কোডকে আরও পরিষ্কার এবং কার্যকরী করে তোলে।
Read more