JavaScript Generators
একটি জাভাস্ক্রিপ্ট ফাংশন শুধুমাত্র একটি মান ফেরত দিতে পারে।
একটি জাভাস্ক্রিপ্ট জেনারেটর একবারে একাধিক মান ফেরত দিতে পারে।
একটি জাভাস্ক্রিপ্ট জেনারেটর ডেটার প্রবাহ প্রদান করতে পারে।
একটি জাভাস্ক্রিপ্ট জেনারেটর বিরতি এবং পুনরায় শুরু করা যেতে পারে।
Generator Functions
একটি জেনারেটর ফাংশনfunction*সিনট্যাক্স ব্যবহার করে সংজ্ঞায়িত:
function* myGenerator() {}
যখন বলা হয়, একটি জেনারেটর ফাংশন একটি জেনারেটর বস্তু প্রদান করে, একটি আক্ষরিক মান নয়:
{value:1, done:false}
Generator Objects
জেনারেটর ফাংশন দ্বারা একটি জেনারেটর বস্তু ফেরত দেওয়া হয়।
এটি বিপরীত এবং বিপরীত উভয় প্রোটোকলের সাথে সামঞ্জস্য করে, যার অর্থ এটিfor...ofলুপ ব্যবহার করে পুনরুদ্ধার করা যেতে পারে।
Example
ফাংশন* myStream() { // ফেরত {মান:1, সম্পন্ন: মিথ্যা} ফলন 1; // ফেরত {মান:2, সম্পন্ন: মিথ্যা} ফলন 2; // ফেরত {মান:3, সম্পন্ন:সত্য} রিটার্ন 3; } // একটি জেনারেটর তৈরি করুন যাক myGenerator = myStream(); // জেনারেটরের উপর পুনরাবৃত্তি করুন জন্য (মাইজেনারেটরের মান দিন) { // কোড }
The yield Keyword
yieldকীওয়ার্ড ফাংশনটি স্থগিত করে এবং কলকারীকে একটি মান প্রদান করে।
জেনারেটরের অবস্থান সংরক্ষণ করা হয়, এবংnext()যখন ডাকা হয়yieldবিন্দু থেকে আবার শুরু হতে পারে.
জেনারেটরyieldতারা কলের মধ্যে তাদের অভ্যন্তরীণ অবস্থা বজায় রাখে, যেখানে তারা ছেড়েছিল অপারেশন চালিয়ে যেতে দেয়।
দ্রষ্টব্য:
উপরের কোড উদাহরণ 1 এবং 2 প্রদান করে। 3 নয়!
for..ofলুপdone:trueহয়ে গেলে প্রস্থান করুন।
সব মান পেতে, তাদেরyieldসঙ্গে পুনঃনির্দেশ
Example
ফাংশন* myStream() { // ফেরত {মান:1, সম্পন্ন: মিথ্যা} ফলন 1; // ফেরত {মান:2, সম্পন্ন: মিথ্যা} ফলন 2; // ফেরত {মান:3, সম্পন্ন: মিথ্যা} ফলন 3; } // একটি জেনারেটর তৈরি করুন যাক myGenerator = myStream(); // জেনারেটরের উপর পুনরাবৃত্তি করুন জন্য (মাইজেনারেটরের মান দিন) { // কোড }
Generator Object Methods
একটি জেনারেটর বস্তু বিপরীতমুখী এবং পুনর্জন্মমূলক প্রোটোকলের সাথে সামঞ্জস্যপূর্ণ।
এইfor...ofপুনরুদ্ধার লুপ দিয়ে করা যেতে পারে।
এর জন্যও পদ্ধতি রয়েছে:
| পদ্ধতি | ব্যাখ্যা |
|---|---|
next() |
একটি জেনারেটর ফাংশনের পরবর্তী অপারেশন পুনরায় শুরু করে |
return() |
এই ফাংশনটি সম্পূর্ণ করে এবং প্রদত্ত মান প্রদান করে |
throw() |
এই ফাংশন একটি ব্যতিক্রম নিক্ষেপ |
The next() Method
জেনারেটর অবজেক্টে কল করা হলে এটি জেনারেটরের ফাংশনটি পুনরায় শুরু করে।
এটি একটি মান এবং একটি বুলিয়ান সহ একটি বস্তু প্রদান করে যা নির্দেশ করে যে জেনারেটরটি সম্পূর্ণ হয়েছে কিনা:
{ value: value, done: true|false}
Custom Iterators
জেনারেটর জটিল ডেটা স্ট্রাকচার বা অ্যারের জন্য কাস্টম রিটার্ন তৈরি করা সহজ করে তোলে।
গুরুত্বপূর্ণ নোট:
জেনারেটর সরাসরি মূল জাভাস্ক্রিপ্ট ভাষাতে পুনরাবৃত্তি ধারণা নিয়ে আসেfor...ofএর আচরণ কাস্টমাইজ করার জন্য একটি প্রক্রিয়া প্রদান করুন
একটি বাস্তব উদাহরণ
কিভাবে জেনারেটর একাধিক মান ফেরত দিতে পারে তার একটি উদাহরণ:
Example
ফাংশন* নম্বর জেনারেটর() { যাক সংখ্যা = 1; যখন (সত্য) { ফলন সংখ্যা; সংখ্যা++; } } // জেনারেটর তৈরি করুন const gen = number Generator(); // প্রথম 5 নম্বর পান console.log(gen.next().value); // ১ console.log(gen.next().value); // 2 console.log(gen.next().value); // 3 console.log(gen.next().value); // 4 console.log(gen.next().value); // 5
এই জেনারেটর সংখ্যার একটি অন্তহীন ক্রম তৈরি করে, কিন্তু প্রয়োজন হলেই সেগুলি ফেরত দেয়।
জাভাস্ক্রিপ্ট জেনারেটর টিউটোরিয়াল
নিম্নলিখিত জেনারেটর ফাংশন বিবেচনা করুন:
function* simpleGenerator() {
yield 'A';
yield 'B';
yield 'C';
return 'D';
}
const gen = simpleGenerator();
নিচের কোড রান করার পরresultচলকের মান কত?
let result = '';
for (let value of gen) {
result += value;
}