JavaScript Generators

জাভাস্ক্রিপ্ট জেনারেটর শিখুন

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;
}

সঠিক উত্তর চয়ন করুন:

'ABCD'
✗ ভুল! for...অফ লুপ প্রস্থান যখন সম্পন্ন হয়: সত্য ফেরত 'D' সম্পন্ন: সত্য উৎপন্ন করে
'ABC'
✗ ভুল! 'C' না পাওয়া পর্যন্ত লুপটি কার্যকর হয়, কিন্তু আরও একটি মান আছে
'ABC'
✓ ঠিক আছে! লুপ প্রস্থানের জন্য... সম্পন্ন হলে: সত্য ফেরত 'D' সম্পন্ন হয়েছে: সত্য, তাই 'D' যোগ করা হবে না
'AB'
✗ ভুল! জেনারেটর 'C' পর্যন্ত ফল দেয়, যা লুপের জন্য...এর সাথে যোগ করা হয়