Generators কি এবং কিভাবে কাজ করে

Comprehensions এবং Generators - কফিস্ক্রিপ্ট (CoffeeScript) - Web Development

252

Generators হল JavaScript এর একটি বৈশিষ্ট্য যা ফাংশনকে ইটারেবল (iterable) বা সাসপেন্ড (suspend) করতে সাহায্য করে, অর্থাৎ একটি ফাংশন execution-এর মাঝে কিছু সময়ের জন্য থামিয়ে রাখতে পারে এবং পরবর্তীতে আবার চালু করা যায়। CoffeeScript-এ generators একটি শক্তিশালী ফিচার, যেটি অ্যাসিঙ্ক্রোনাস কোড এবং সিকোয়েন্সাল অপারেশনগুলোর জন্য খুবই উপকারী।

Generators কি?

Generators হল ফাংশন যা execution থামিয়ে দিতে পারে এবং পরে পুনরায় চালু করতে পারে। JavaScript-এ, function* কিওয়ার্ড এবং yield কিওয়ার্ড ব্যবহার করে generators তৈরি করা হয়। CoffeeScript-এ এটি আরও সংক্ষিপ্ত এবং সহজভাবে ব্যবহৃত হয়।

yield কিওয়ার্ড একটি ফাংশন execution থামাতে ব্যবহৃত হয় এবং এটি পরবর্তীতে পুনরায় চালু করা সম্ভব হয়।


CoffeeScript-এ Generators এর ব্যবহার

CoffeeScript-এ generators ব্যবহার করতে gen কিওয়ার্ড এবং yield কিওয়ার্ড ব্যবহার করা হয়।

উদাহরণ: একটি সাধারণ Generator ফাংশন

gen = ->
  yield 1
  yield 2
  yield 3

g = gen()
console.log g.next().value  # 1
console.log g.next().value  # 2
console.log g.next().value  # 3

এখানে:

  • gen একটি generator ফাংশন, যেখানে yield কিওয়ার্ড দ্বারা মানগুলি এক এক করে ফেরত দেওয়া হচ্ছে।
  • g.next().value ব্যবহার করে আমরা পরবর্তী মানটি পেতে পারি, এবং এভাবে আমরা generator ফাংশন থেকে প্রতিটি মান বের করতে পারি।

JavaScript-এ কম্পাইল হওয়া কোড:

var g, gen;

gen = function() {
  return (function() {
    switch (arguments.length) {
      case 0:
        return 1;
      case 1:
        return 2;
      case 2:
        return 3;
    }
  }).apply(this, arguments);
};

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

Generator Function এর বৈশিষ্ট্য

  1. yield কিওয়ার্ড: ফাংশন execution থামানোর জন্য yield কিওয়ার্ড ব্যবহার করা হয়। yield ফাংশনকে একটি মান ফেরত দেয় এবং execution এর পরবর্তী সময়ে চালু হওয়ার জন্য স্টেট সংরক্ষণ করে রাখে।
  2. next() মেথড: Generator ফাংশন যখন কল করা হয়, তখন এটি একটি iterator অবজেক্ট রিটার্ন করে। এর next() মেথড কল করা হলে, ফাংশন execution পরবর্তী yield পর্যন্ত পৌঁছায় এবং সেই মানটি রিটার্ন হয়।
  3. done প্রপার্টি: next() মেথড একটি অবজেক্ট রিটার্ন করে যা value (ফাংশন থেকে ফেরত আসা মান) এবং done (ফাংশন সম্পূর্ণ হয়েছে কিনা) প্রপার্টি ধারণ করে। যখন ফাংশন সব yield পয়েন্ট পার হয়ে শেষ হয়, তখন done true হয়।

উদাহরণ: done প্রপার্টি সহ Generator

gen = ->
  yield 1
  yield 2
  yield 3

g = gen()
console.log g.next()  # { value: 1, done: false }
console.log g.next()  # { value: 2, done: false }
console.log g.next()  # { value: 3, done: false }
console.log g.next()  # { value: undefined, done: true }

এখানে:

  • done প্রপার্টি true হয়ে যাবে যখন generator ফাংশন সব yield সম্পন্ন করবে।

CoffeeScript-এ Generator এবং Asynchronous Code

Generator ফাংশনকে অ্যাসিঙ্ক্রোনাস অপারেশনগুলির সাথে ব্যবহার করা খুবই উপকারী, বিশেষ করে প্যারালেল অপারেশন বা অ্যাসিঙ্ক্রোনাস কোড চালাতে। এর মাধ্যমে আপনি সিঙ্ক্রোনাসভাবে কোড লিখতে পারেন যা আসলে অ্যাসিঙ্ক্রোনাস।

উদাহরণ: অ্যাসিঙ্ক্রোনাস অপারেশনগুলির সাথে Generator ব্যবহার

fetchData = (url) ->
  # অ্যাসিঙ্ক্রোনাস ফাংশন হিসেবে কিছু ডেটা ফেচ করার কোড

gen = ->
  console.log "Start"
  yield fetchData('url1')
  console.log "Middle"
  yield fetchData('url2')
  console.log "End"

g = gen()
g.next()  # প্রথম yield এ থামবে
g.next()  # দ্বিতীয় yield এ থামবে

এখানে, fetchData অ্যাসিঙ্ক্রোনাস ফাংশন এবং gen ফাংশন এর মধ্যে yield ব্যবহার করা হয়েছে। yield ফাংশনকে থামিয়ে দেয় এবং পরবর্তী কলের জন্য অপেক্ষা করে।


সারাংশ

Generators CoffeeScript-এ একটি শক্তিশালী টুল যা ফাংশনকে সাসপেন্ড বা থামিয়ে দেয় এবং পরবর্তীতে আবার চালু করতে সাহায্য করে। এটি বিশেষভাবে অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করতে এবং সিকোয়েন্সাল অপারেশনগুলো সিমুলেট করতে কার্যকরী। yield কিওয়ার্ড দ্বারা ফাংশন থামানো হয় এবং next() মেথডের মাধ্যমে পরবর্তী মান বা ফাংশন চালু করা হয়। CoffeeScript-এ এটি খুবই সংক্ষিপ্ত এবং পরিষ্কারভাবে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...