Iterator (ইটারেটর) হলো একটি অবজেক্ট যা একটি কালেকশন (যেমন, List, Set, Map, ইত্যাদি) বা ডেটা স্ট্রাকচারের উপাদানগুলোকে পর্যায়ক্রমে এক এক করে এক্সেস করার জন্য ব্যবহৃত হয়। এটি কালেকশনের উপাদানগুলোতে পঠনযোগ্য (readable) অ্যাক্সেস প্রদান করে এবং একে একে প্রতিটি উপাদানকে কাজে লাগানোর সুযোগ দেয়। ইটারেটরের সাহায্যে আপনি একটি কালেকশনকে সম্পূর্ণভাবে বা একটি নির্দিষ্ট শর্তের ভিত্তিতে ট্রাভার্স (একা একা ঘোরানো) করতে পারেন।
স্কালাতে, Iterator হল একটি অবজেক্ট যা একটি কালেকশন থেকে উপাদানগুলো বের করতে সাহায্য করে, তবে এটি ডেটা পরিবর্তন করতে পারে না (অথবা পরিবর্তন করলে একটি নতুন কপি তৈরি হয়, ইমমিউটেবল কালেকশনে)।
Iterators এর বৈশিষ্ট্য
- এক্সেসিং এলিমেন্টস:
ইটারেটর একটি কালেকশনের উপাদানগুলোর একে একে অ্যাক্সেস করতে ব্যবহৃত হয়। এটি ডেটা পরিবর্তন করতে পারে না, তবে আপনি উপাদানগুলো পড়তে পারেন। hasNextএবংnextমেথড:
ইটারেটরের দুটি প্রধান মেথড হলো:hasNext: যদি ইটারেটরের পরবর্তী উপাদান থাকে তবে এটিtrueরিটার্ন করে, অন্যথায়false।next: পরবর্তী উপাদান রিটার্ন করে এবং ইটারেটরের অবস্থান এক পদক্ষেপ এগিয়ে চলে।
- একমাত্র ফাংশন:
একবার ইটারেটর একটি কালেকশন চালনা করা শুরু করলে, আপনি শুধুমাত্র একে একে উপাদানগুলো অ্যাক্সেস করতে পারবেন। একবার এক উপাদান পড়া হলে, পরবর্তী উপাদানে পৌঁছানো যাবে।
Iterators এর ব্যবহার
স্কালাতে Iterator সাধারণত কালেকশনের উপাদানগুলির উপর লুপ করতে ব্যবহৃত হয়। এখানে কিছু উদাহরণ দেওয়া হলো যেখানে ইটারেটর ব্যবহার করা হয়েছে।
উদাহরণ ১: একটি List এর উপাদানগুলোতে ইটারেটর ব্যবহার
val numbers = List(1, 2, 3, 4, 5)
val iterator = numbers.iterator
while (iterator.hasNext) {
println(iterator.next())
}এখানে, numbers.iterator একটি ইটারেটর তৈরি করছে যা List-এর উপাদানগুলো একে একে পড়ে এবং hasNext ও next মেথড ব্যবহার করে ডেটার প্রতিটি উপাদান অ্যাক্সেস করা হচ্ছে।
উদাহরণ ২: Set এর উপর ইটারেটর ব্যবহার
val fruitSet = Set("Apple", "Banana", "Orange")
val iterator = fruitSet.iterator
while (iterator.hasNext) {
println(iterator.next())
}এখানে, Set-এর উপর ইটারেটর ব্যবহার করে প্রতিটি ফলের নাম বের করা হচ্ছে।
উদাহরণ ৩: Map এর উপর ইটারেটর ব্যবহার
val fruitMap = Map("apple" -> 3, "banana" -> 2, "cherry" -> 5)
val iterator = fruitMap.iterator
while (iterator.hasNext) {
val (key, value) = iterator.next()
println(s"Fruit: $key, Quantity: $value")
}এখানে, Map-এর উপর ইটারেটর ব্যবহার করে প্রতিটি key-value পেয়ার একে একে পড়া হচ্ছে।
for-যথাযথ ইটারেটর ব্যবহার
স্কালাতে, আপনি for লুপের মাধ্যমে ইটারেটর ব্যবহার করতে পারেন, যা আরও সহজ এবং পরিষ্কার।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5)
for (num <- numbers.iterator) {
println(num)
}এখানে, for লুপে numbers.iterator ব্যবহার করা হয়েছে এবং এটি তালিকার সমস্ত উপাদান একে একে প্রিন্ট করবে।
সারাংশ
Iterator একটি গুরুত্বপূর্ণ কন্সেপ্ট যা স্কালাতে কালেকশনগুলির উপাদানগুলোর উপর কাজ করার জন্য ব্যবহৃত হয়। এটি hasNext এবং next মেথডের মাধ্যমে ডেটার উপাদানগুলো একে একে অ্যাক্সেস করার সুযোগ দেয়। ইটারেটরের মাধ্যমে আপনি একটি কালেকশনকে কার্যকরভাবে ট্রাভার্স করতে পারেন এবং প্রয়োজনীয় তথ্য বের করতে পারেন। স্কালাতে ইটারেটরের সাহায্যে একটি কালেকশনের উপাদানগুলি পড়ার জন্য বিভিন্ন উপায় ব্যবহৃত হতে পারে, যেমন while লুপ বা for লুপের মাধ্যমে।
Read more