ES6-এ Generator Functions এবং Iterators নতুন ধারণা হিসেবে পরিচিত হয়েছে। এগুলি অ্যাসিনক্রোনাস কোড, বড় ডেটা সেট এবং ক্রমাগত ডেটা প্রবাহের ক্ষেত্রে বিশেষভাবে উপকারী। Generator Functions এবং Iterators এর মাধ্যমে আপনি আরও কার্যকরীভাবে কোড পরিচালনা করতে পারেন, যেখানে lazy evaluation এবং stateful iteration করা সম্ভব।
1. Generator Functions
Generator Functions হল এমন ফাংশন যা একটি iterator রিটার্ন করে। এদের সাহায্যে আপনি ফাংশনের execution সময়কে বিরতি দিতে (pause) এবং পরে পুনরায় চালু করতে পারেন। এরা function* কিওয়ার্ড দিয়ে ডিফাইন করা হয় এবং yield কিওয়ার্ড ব্যবহার করে মান রিটার্ন করা হয়।
Generator Function এর বৈশিষ্ট্য:
function*কিওয়ার্ড ব্যবহার করে জেনারেটর ফাংশন ঘোষণা করা হয়।yieldকিওয়ার্ড ব্যবহার করে ফাংশন থেকে মান ফেরত দেওয়া হয় এবং ফাংশনের execution সেখানে থেমে যায়।- ফাংশন পুনরায় কল করলে execution আবার থেকে শুরু হয় যেখানে আগের
yieldথেমেছিল।
উদাহরণ:
function* countUpTo(max) {
let count = 1;
while (count <= max) {
yield count; // Return the current count and pause
count++;
}
}
const counter = countUpTo(5);
console.log(counter.next().value); // 1
console.log(counter.next().value); // 2
console.log(counter.next().value); // 3
console.log(counter.next().value); // 4
console.log(counter.next().value); // 5
console.log(counter.next().value); // undefined (iteration is complete)
এখানে, countUpTo একটি generator function যা 1 থেকে 5 পর্যন্ত সংখ্যাগুলো yield করে ফেরত দেয়। প্রতিটি next() কলের মাধ্যমে পরবর্তী মানটি পাওয়া যায়।
2. Iterators
Iterators হল এমন অবজেক্ট যা কোন ডেটা সংগ্রহের (যেমন অ্যারে, অবজেক্ট) উপাদান একে একে পরিদর্শন করতে সক্ষম। Generator functions সাধারণত একটি iterator রিটার্ন করে।
Iterators দুটি মেথডে কাজ করে:
next(): পরবর্তী মান ফেরত দেয় এবং সাথে একটি done প্রোপার্টি দিয়ে জানায় যে iteration শেষ হয়েছে কিনা।Symbol.iterator: এটি একটি অবজেক্টের জন্য iterator তৈরি করার জন্য ব্যবহৃত হয়।
উদাহরণ:
// Array iterator
const numbers = [1, 2, 3];
const iterator = numbers[Symbol.iterator]();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
এখানে, numbers[Symbol.iterator]() এর মাধ্যমে একটি iterator তৈরি করা হয়েছে। তারপর next() মেথড কল করা হয়েছে যা মান এবং iteration status প্রদান করেছে।
3. Generator Functions এবং Iterators এর মধ্যে সম্পর্ক
- Generator functions হলো একটি বিশেষ ধরনের ফাংশন যা iterator রিটার্ন করে এবং
yieldকিওয়ার্ড ব্যবহার করে মান ফিরিয়ে দেয়। - Iterators এমন অবজেক্ট যা
next()মেথডের মাধ্যমে ধারাবাহিকভাবে মান প্রদান করে, এবং iteration শেষ হলেdoneপ্রোপার্টি true হয়ে যায়।
4. Generator Functions এবং Iterators এর ব্যবহার
Generator functions এবং iterators অনেক ধরণের অ্যাসিনক্রোনাস অপারেশন, বড় ডেটা সেক্টরের ডেটা প্রসেসিং, এবং কোডের কার্যকারিতা বাড়াতে ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, আপনি যদি কোনো বড় ডেটাবেস থেকে ডেটা বের করতে চান, তবে আপনি জেনারেটর ফাংশন ব্যবহার করে ডেটার টুকরো টুকরো করে সেগুলো প্রসেস করতে পারেন।
উদাহরণ:
function* fetchData() {
yield fetch('https://jsonplaceholder.typicode.com/posts/1').then(res => res.json());
yield fetch('https://jsonplaceholder.typicode.com/posts/2').then(res => res.json());
yield fetch('https://jsonplaceholder.typicode.com/posts/3').then(res => res.json());
}
const dataIterator = fetchData();
dataIterator.next().value.then(data => console.log(data)); // First fetch result
dataIterator.next().value.then(data => console.log(data)); // Second fetch result
dataIterator.next().value.then(data => console.log(data)); // Third fetch result
এখানে, প্রতিটি yield Promise রিটার্ন করে, এবং next() কলের মাধ্যমে পরবর্তী fetch অপারেশন শুরু হয়।
5. Benefits of Generator Functions and Iterators
- Lazy Evaluation: Generator functions এক সময় একটিই মান প্রদান করে এবং পরবর্তী মানের জন্য
next()কল করার মাধ্যমে তা পরবর্তীতে লোড হয়। এটি অনেক বেশি memory-efficient, বিশেষ করে যখন বড় ডেটা সেট প্রক্রিয়া করতে হয়। - Stateful Iteration: Generator functions ব্যবহারের মাধ্যমে আপনি একটি স্টেটফুল iterator তৈরি করতে পারেন যা অতিরিক্ত কম্পিউটেশনাল শক্তি ছাড়া সেগুলির উপর কাজ করতে সক্ষম।
- Asynchronous Flow Control: Generator functions অ্যাসিনক্রোনাস কোড পরিচালনা করতে সাহায্য করে, বিশেষ করে Promise এর সাথে একত্রে ব্যবহারে।
সারাংশ
Generator Functions এবং Iterators ES6-এ নতুনভাবে যুক্ত হওয়া শক্তিশালী টুলস, যেগুলি আপনাকে কোডের flow আরও উন্নতভাবে নিয়ন্ত্রণ করতে সহায়তা করে। এগুলি অ্যাসিনক্রোনাস অপারেশন, বড় ডেটা সেক্টর এবং কার্যকরী ডেটা প্রসেসিংয়ের ক্ষেত্রে খুবই উপকারী। Generator Functions বিশেষভাবে ব্যবহারকারীকে lazy evaluation এবং stateful iteration সুবিধা দেয়, যা অ্যাসিনক্রোনাস কোড আরও দক্ষতার সাথে পরিচালনা করতে সহায়তা করে।
Read more