Iterables এবং Iterators হল এমন ধারণা যা JavaScript এবং CoffeeScript-এর মতো ভাষায় коллекশন বা অ্যারে থেকে উপাদানগুলিকে পুনরায় আনা এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। CoffeeScript, JavaScript-এর মতো, Iterable এবং Iterator এর মাধ্যমে একটি সংগ্রহের (যেমন অ্যারে, অবজেক্ট) উপর লুপ করা সম্ভব। এখানে আমরা CoffeeScript-এ Iterables এবং Iterators এর ব্যবহার বিস্তারিতভাবে আলোচনা করব।
Iterable কী?
Iterable হল এমন একটি অবজেক্ট যেটি Iterator তৈরি করতে সক্ষম, যা উপাদান এক এক করে ইটারেট (অথবা রিটার্ন) করে। একে একটি নির্দিষ্ট ইন্টারফেস (যেমন Symbol.iterator) অনুসরণ করতে হয়, এবং এটি একটি for...of লুপ বা অন্যান্য ইটারেশন মেকানিজমের মাধ্যমে ট্রাভার্স করা যেতে পারে।
CoffeeScript-এ, যেকোনো অ্যারে বা অবজেক্ট সাধারণত Iterable হিসাবে ব্যবহৃত হতে পারে।
উদাহরণ: Iterable ব্যবহার
names = ["Alice", "Bob", "Charlie"]
for name in names
console.log name
এখানে names অ্যারেটি একটি Iterable, এবং for...in লুপের মাধ্যমে এটি ট্রাভার্স করা হচ্ছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var names;
names = ["Alice", "Bob", "Charlie"];
for (name of names) {
console.log(name);
}
Iterator কী?
Iterator হল একটি অবজেক্ট যা একটি next() মেথড প্রদান করে, যার মাধ্যমে পরবর্তী মান (বা উপাদান) পাওয়া যায়। Iterator সাধারণত একটি Iterable অবজেক্টের মাধ্যমে তৈরি হয় এবং এটি next() মেথড দিয়ে মান ফেরত দেয় যতক্ষণ না অবশেষে এটি done: true রিটার্ন করে।
Iterable এবং Iterator এর সম্পর্ক:
- Iterable: একটি অবজেক্ট যা Iterator তৈরি করতে সক্ষম।
- Iterator: একটি অবজেক্ট যা next() মেথড প্রদান করে, যা একে একে উপাদান ফেরত দেয়।
উদাহরণ: Iterator ব্যবহার
names = ["Alice", "Bob", "Charlie"]
iterator = names[Symbol.iterator]()
console.log iterator.next() # { value: "Alice", done: false }
console.log iterator.next() # { value: "Bob", done: false }
console.log iterator.next() # { value: "Charlie", done: false }
console.log iterator.next() # { value: undefined, done: true }
এখানে names[Symbol.iterator()] একটি iterator তৈরি করছে এবং next() মেথডের মাধ্যমে উপাদানগুলো পুনরায় ফেরত দিচ্ছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var names, iterator;
names = ["Alice", "Bob", "Charlie"];
iterator = names[Symbol.iterator]();
console.log(iterator.next()); // { value: "Alice", done: false }
console.log(iterator.next()); // { value: "Bob", done: false }
console.log(iterator.next()); // { value: "Charlie", done: false }
console.log(iterator.next()); // { value: undefined, done: true }
CoffeeScript-এ Iterable এবং Iterator এর ব্যবহার
১. Array Iterables
CoffeeScript-এ একটি অ্যারে একটি Iterable অবজেক্ট, যার মধ্যে আমরা for...in বা for...of লুপ ব্যবহার করে উপাদানগুলো ট্রাভার্স করতে পারি।
fruits = ["Apple", "Banana", "Orange"]
for fruit in fruits
console.log fruit
২. Object Iterables
CoffeeScript-এ একটি অবজেক্টের উপাদান ইটারেট করতে হলে, for...in লুপ ব্যবহার করা হয়। তবে, অবজেক্টে Symbol.iterator নেই, তাই এটা ইন্টারফেসের মাধ্যমে ইটারেট করা সম্ভব নয়। তবে, আপনি এর কীগুলি বা মানগুলো ইটারেট করতে পারেন।
person = name: "Alice", age: 30, city: "New York"
for key, value of person
console.log "#{key}: #{value}"
JavaScript-এ কম্পাইল হওয়া কোড:
var person;
person = { name: "Alice", age: 30, city: "New York" };
for (key in person) {
value = person[key];
console.log(key + ": " + value);
}
Iterator ব্যবহার: কাস্টম Iterable তৈরি
আপনি নিজের Iterable অবজেক্ট তৈরি করতে পারেন যেটি একটি Iterator প্রদান করবে। এটি করার জন্য, আপনি Symbol.iterator মেথড ব্যবহার করতে পারেন।
উদাহরণ: কাস্টম Iterable তৈরি
class MyRange
constructor: (@start, @end) ->
[Symbol.iterator]: ->
value = @start
return
next: ->
if value <= @end
result = { value: value, done: false }
value += 1
return result
else
return { value: undefined, done: true }
range = new MyRange(1, 5)
for num in range
console.log num
এখানে, MyRange ক্লাসটি একটি কাস্টম Iterable তৈরি করেছে যা ১ থেকে ৫ পর্যন্ত সংখ্যাগুলি next() মেথডের মাধ্যমে ইটারেট করে।
JavaScript-এ কম্পাইল হওয়া কোড:
var MyRange, range;
MyRange = class MyRange {
constructor(start, end) {
this.start = start;
this.end = end;
}
[Symbol.iterator]() {
var value;
value = this.start;
return {
next: () => {
if (value <= this.end) {
var result = { value: value, done: false };
value += 1;
return result;
} else {
return { value: undefined, done: true };
}
}
};
}
};
range = new MyRange(1, 5);
for (num of range) {
console.log(num);
}
সারাংশ
- Iterable হল এমন একটি অবজেক্ট যা Iterator তৈরি করতে সক্ষম, এবং এটি for...of লুপের মাধ্যমে ট্রাভার্স করা যায়।
- Iterator একটি অবজেক্ট যা next() মেথড প্রদান করে এবং এটি একে একে উপাদান ফেরত দেয়।
- CoffeeScript-এ Array এবং Object ইটারেশন সহজ এবং সংক্ষিপ্ত, এবং আপনি কাস্টম Iterable তৈরি করতে পারেন যা Symbol.iterator ব্যবহার করে একটি Iterator প্রদান করবে।
CoffeeScript-এ Iterables এবং Iterators এর মাধ্যমে আপনি কোডের কার্যকারিতা বাড়াতে এবং ডেটা সংগ্রহের উপাদানগুলোকে সহজে পরিচালনা করতে পারেন।
Read more