Custom Iterators ES6 এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ব্যবহারকারীদের (users) তাদের নিজস্ব কাস্টম iterators তৈরি করার অনুমতি দেয়। Iterators এমন একটি অবজেক্ট যা ইটারেটেবল ডেটার উপর ইটারেশন পরিচালনা করে, অর্থাৎ, এটি ডেটার একের পর এক উপাদান (element) অ্যাক্সেস করার উপায় প্রদান করে।
ES6-এ iterable ডেটা স্ট্রাকচার (যেমন: অ্যারে, ম্যাপ, সেট) রয়েছে, এবং আপনি চাইলে কাস্টম অবজেক্টেও এই ইটারেটিং পদ্ধতি প্রয়োগ করতে পারেন।
Iterator Interface
একটি কাস্টম ইটারেটর তৈরি করার জন্য, আপনাকে একটি অবজেক্টে [Symbol.iterator] মেথড সংজ্ঞায়িত করতে হবে। এই মেথডটি একটি iterator অবজেক্ট রিটার্ন করবে, যার মধ্যে next() মেথড থাকবে। next() মেথডটি একটি অবজেক্ট রিটার্ন করে, যার মধ্যে দুটি প্রপার্টি থাকবে:
value: পরবর্তী মান (value) যা রিটার্ন করা হবে।done: একটি বুলিয়ান মান যা নির্দেশ করে যে ইটারেশন শেষ হয়েছে কিনা।
Custom Iterator তৈরি করার উদাহরণ
এখানে, একটি কাস্টম অবজেক্ট তৈরি করা হয়েছে যার মাধ্যমে আপনি নিজে ইটারেটর কাস্টমাইজ করতে পারবেন।
উদাহরণ:
const myIterable = {
start: 1,
end: 5,
// [Symbol.iterator] মেথডের মাধ্যমে iterator কাস্টমাইজ করা হচ্ছে
[Symbol.iterator]() {
let current = this.start;
let last = this.end;
// iterator অবজেক্ট রিটার্ন
return {
next() {
if (current <= last) {
return { value: current++, done: false }; // value রিটার্ন এবং done false থাকবে
} else {
return { value: undefined, done: true }; // done true হলে ইটারেশন শেষ
}
}
};
}
};
// ইটারেটর ব্যবহার করা হচ্ছে
for (let value of myIterable) {
console.log(value); // 1, 2, 3, 4, 5
}
এখানে, [Symbol.iterator] মেথডটি আমাদের কাস্টম ইটারেটর তৈরি করেছে, যা ১ থেকে ৫ পর্যন্ত সংখ্যাগুলি ইটারেট করবে। যখন next() মেথড কল হবে, তখন প্রতিবার একটি নতুন value রিটার্ন হবে, যতক্ষণ না ইটারেশন শেষ হবে।
Custom Iterator এর ফিচার
[Symbol.iterator]মেথড: এটি একটি মেথড যা কাস্টম ইটারেটর তৈরি করার জন্য দরকার। এটি এক বা একাধিকnext()মেথডের সাথে একটি অবজেক্ট রিটার্ন করবে।next()মেথড: এটি প্রতিবার ইটারেশন চলাকালীন পরবর্তী মান এবংdoneস্টেটাস রিটার্ন করবে।
done এর ব্যবহার
done প্রপার্টি নির্ধারণ করে যে ইটারেটরটি আর কোনও মান রিটার্ন করবে কি না। done মানটি true হলে, ইটারেটর শেষ এবং ইটারেশন বন্ধ হয়ে যাবে।
উদাহরণ:
const myIterable = {
start: 10,
end: 12,
[Symbol.iterator]() {
let current = this.start;
let last = this.end;
return {
next() {
if (current <= last) {
return { value: current++, done: false };
} else {
return { value: undefined, done: true }; // done: true হলে আর কিছু রিটার্ন হবে না
}
}
};
}
};
for (let num of myIterable) {
console.log(num); // 10, 11, 12
}
অতিরিক্ত উদাহরণ: Reverse Iterable
একটি কাস্টম ইটারেটর ব্যবহার করে একটি রিভার্স (reverse) ইটারেটর তৈরি করা যায়, যা শেষ থেকে শুরু করে মান গুলি রিটার্ন করবে।
উদাহরণ:
const reverseIterable = {
start: 5,
end: 1,
[Symbol.iterator]() {
let current = this.start;
let last = this.end;
return {
next() {
if (current >= last) {
return { value: current--, done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
};
for (let num of reverseIterable) {
console.log(num); // 5, 4, 3, 2, 1
}
এখানে, reverseIterable একটি অবজেক্ট যেটি ৫ থেকে ১ পর্যন্ত মান রিটার্ন করে, অর্থাৎ রিভার্স অর্ডারে ইটারেট করা হচ্ছে।
Custom Iterators এর সুবিধা
- অবজেক্টের উপর কাস্টম ইটারেশন: আপনি যেকোনো অবজেক্টের উপর কাস্টম ইটারেটর তৈরি করে ইটারেশন প্রক্রিয়াকে কাস্টমাইজ করতে পারবেন।
- অধিক কাস্টমাইজেশন: আপনি ইটারেটরের লজিক পুরোপুরি কাস্টমাইজ করতে পারবেন (যেমন একটি নির্দিষ্ট শর্তে মান রিটার্ন না করা, বা রিভার্স ইটারেশন করা)।
- অবজেক্টের সাথে ইন্টারফেস ফিচার সংযোগ:
[Symbol.iterator]এর মাধ্যমে ইটারেটেবল অবজেক্ট তৈরি করা সহজ।
সারাংশ
Custom Iterators ES6 এর শক্তিশালী ফিচার যা আপনাকে ইটারেশন প্রক্রিয়াকে কাস্টমাইজ করার সুযোগ দেয়। [Symbol.iterator] এবং next() মেথডের মাধ্যমে আপনি বিভিন্ন ধরনের কাস্টম ইটারেটর তৈরি করতে পারবেন, যা কোডকে আরও কার্যকর এবং সংগঠিত করতে সহায়ক।
Read more