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 এর বৈশিষ্ট্য
yieldকিওয়ার্ড: ফাংশন execution থামানোর জন্যyieldকিওয়ার্ড ব্যবহার করা হয়।yieldফাংশনকে একটি মান ফেরত দেয় এবং execution এর পরবর্তী সময়ে চালু হওয়ার জন্য স্টেট সংরক্ষণ করে রাখে।next()মেথড: Generator ফাংশন যখন কল করা হয়, তখন এটি একটি iterator অবজেক্ট রিটার্ন করে। এরnext()মেথড কল করা হলে, ফাংশন execution পরবর্তীyieldপর্যন্ত পৌঁছায় এবং সেই মানটি রিটার্ন হয়।doneপ্রপার্টি:next()মেথড একটি অবজেক্ট রিটার্ন করে যাvalue(ফাংশন থেকে ফেরত আসা মান) এবংdone(ফাংশন সম্পূর্ণ হয়েছে কিনা) প্রপার্টি ধারণ করে। যখন ফাংশন সবyieldপয়েন্ট পার হয়ে শেষ হয়, তখনdonetrue হয়।
উদাহরণ: 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-এ এটি খুবই সংক্ষিপ্ত এবং পরিষ্কারভাবে ব্যবহৃত হয়।
Read more