function* এবং yield এর ব্যবহার

Generators - জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

278

ES6 (ECMAScript 2015) function* এবং yield ব্যবহার করার মাধ্যমে generator functions তৈরি করা সম্ভব হয়েছে। এটি অ্যাসিঙ্ক্রোনাস কোড লেখা আরও সহজ এবং কার্যকরী করে তোলে। Generator functions এমন ফাংশন, যা execution এর মাঝে এক বা একাধিক বার বিরতি নিতে পারে এবং পরে পুনরায় চালু হতে পারে।

Generator Function কি?

Generator function এমন একটি ফাংশন, যা function* সিনট্যাক্স দিয়ে ডিফাইন করা হয় এবং তা yield কিওয়ার্ডের মাধ্যমে এক বা একাধিক মান ফেরত দেয়। এই ফাংশনটি lazy evaluation পদ্ধতিতে কাজ করে, অর্থাৎ যখন প্রয়োজন হয় তখনই পরবর্তী মানটি প্রদান করে।

function সিনট্যাক্স*

function* generatorFunction() {
  // Yield statement
}
  • function*: এটি একটি generator function ডিফাইন করার জন্য ব্যবহৃত হয়।
  • yield: এটি generator function এর execution কে paused করে এবং নির্দিষ্ট মানটি return করে। পরে, পুনরায় function call করার মাধ্যমে execution পুনরায় শুরু হয়।

yield কিওয়ার্ডের ব্যবহার

yield কিওয়ার্ডের মাধ্যমে generator function execution কে স্থগিত করা হয় এবং তার পরবর্তী মানটি next() মেথডের মাধ্যমে পুনরায় চলতে শুরু হয়। yield এর মাধ্যমে ফাংশন বিভিন্ন মান একটি এক করে রিটার্ন করতে পারে। প্রতিটি yield নতুন value ফাংশন থেকে বের করে আনে।

yield এর মৌলিক ব্যবহার:

function* numbers() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = numbers();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

এখানে, numbers() একটি generator function যা yield ব্যবহার করে তিনটি মান 1, 2, 3 return করে। প্রতিটি next() কলের মাধ্যমে yield দ্বারা ফাংশন পরবর্তী মানটি প্রদান করে।


Generator Function এর Working (Execution Flow)

Generator function এর execution সাধারণভাবে একবারে শুরু হয়ে শেষ হয় না, বরং এটি paused অবস্থায় থাকে যতক্ষণ না next() মেথড কল করা হয়। এটি stateful (অবস্থাপনা করা) হয়, কারণ একাধিকবার next() কল করে তা পুনরায় চালু করা সম্ভব।

next() মেথড

next() মেথডটি একটি generator function কে চলমান অবস্থায় নিয়ে আসে এবং পরবর্তী yield এর মান প্রদান করে। এটি একটি object রিটার্ন করে যার মধ্যে দুটি প্রপার্টি থাকে:

  • value: return হওয়া মান
  • done: একটি Boolean মান যা জানায় যে, ফাংশনটি শেষ হয়েছে কি না
function* generateNumbers() {
  yield 10;
  yield 20;
  yield 30;
}

const generator = generateNumbers();
console.log(generator.next()); // { value: 10, done: false }
console.log(generator.next()); // { value: 20, done: false }
console.log(generator.next()); // { value: 30, done: false }
console.log(generator.next()); // { value: undefined, done: true }

এখানে, next() মেথডটি মান প্রদান করে এবং done: true যখন সব মান শেষ হয়ে যায়।


Generator Function এর সুবিধা

  1. Lazy Evaluation:
    • Generator function গুলি lazy হিসেবে কাজ করে, অর্থাৎ তারা প্রয়োজন অনুযায়ী মান প্রদান করে। এতে কম পরিমাণ রিসোর্স ব্যবহার হয় এবং দ্রুত সম্পন্ন হয়।
  2. Asynchronous Programming:
    • Generator function কে অ্যাসিঙ্ক্রোনাস কাজের জন্য ব্যবহার করা যায়, যেমন async/await এর আগেই একটি পদ্ধতি হিসেবে।
  3. Stateful Iteration:
    • একাধিক মানে ইটারেট করতে generator function গুলি অবস্থা রাখতে পারে (stateful) এবং পুনরায় একে একে মান প্রদান করতে পারে।

Generator Function এবং yield এর উদাহরণ

অ্যাসিঙ্ক্রোনাস ফ্লো কন্ট্রোল:

function* fetchData() {
  console.log("Fetching data...");
  yield "Data 1";
  yield "Data 2";
  yield "Data 3";
}

const dataGenerator = fetchData();

console.log(dataGenerator.next().value);  // Fetching data... Data 1
console.log(dataGenerator.next().value);  // Data 2
console.log(dataGenerator.next().value);  // Data 3

এখানে, fetchData একটি generator function যা একে একে বিভিন্ন ডেটা ফেচ করে এবং প্রতিটি yield পরবর্তী ডেটার জন্য ফাংশন কে বিরতি দেয়।

নির্দিষ্ট সময় পর পর মান প্রদান করা:

function* counter() {
  let i = 1;
  while (true) {
    yield i++;
  }
}

const count = counter();
console.log(count.next().value); // 1
console.log(count.next().value); // 2
console.log(count.next().value); // 3

এখানে, counter একটি infinite generator function, যা একের পর এক পরবর্তী সংখ্যার জন্য yield ব্যবহার করছে।


সারাংশ

function* এবং yield ES6 এর শক্তিশালী ফিচার, যা Generator functions তৈরি করতে ব্যবহৃত হয়। এগুলি অ্যাসিঙ্ক্রোনাস কোডের জন্য কার্যকর, যেখানে স্টেটফুল ডেটা প্রক্রিয়া প্রয়োজন। yield কিওয়ার্ড দিয়ে কোডের execution কে বিরতি দেওয়া হয় এবং পরবর্তী সময়ে তা পুনরায় চালু করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...