টাইপস্ক্রিপ্টে জেনারেটর ফাংশন
এই নিবন্ধে টাইপস্ক্রিপ্টে জেনারেটর ফাংশনের ব্যাখ্যা দেওয়া হয়েছে।
আপনি জেনারেটর ফাংশন ব্যবহারের মৌলিক বিষয় থেকে শুরু করে অ্যাসিঙ্ক্রোনাস প্রসেসিং-এর সাথে মিলিত উন্নত উদাহরণগুলির পাশাপাশি কোড নমুনাগুলির মাধ্যমে সব কিছু শিখতে পারেন।
YouTube Video
জেনারেটর ফাংশন
টাইপস্ক্রিপ্টে জেনারেটর ফাংশন জাভাস্ক্রিপ্টের জেনারেটর ফাংশনের সমান কার্যকারিতা সরবরাহ করে। জেনারেটর ফাংশনগুলি function*
(একটি অ্যাস্টারিস্ক সহ একটি ফাংশন ডিক্লেয়ারেশন) ব্যবহার করে সংজ্ঞায়িত করা হয় এবং এগুলি বিশেষ ফাংশন যা স্বাভাবিক ফাংশনের মতো নয়; এগুলি এক্সিকিউশন থামাতে এবং পুনরায় শুরু করতে পারে।
যখন একটি জেনারেটর ফাংশন কল করা হয়, তখন একটি ইটারেটর ফেরত দেওয়া হয়, যা এই ইটারেটরের মাধ্যমে একবারে একটি করে মান তৈরি করে, এবং আপনি yield
কীওয়ার্ড ব্যবহার করে এক্সিকিউশন থামাতে পারেন বা বাইরের থেকে মান পাঠাতে পারেন।
জেনারেটর ফাংশনের মৌলিক সিনট্যাক্স
1function* myGenerator(): Generator<number, void, unknown> {
2 yield 1;
3 yield 2;
4 yield 3;
5}
6
7const gen = myGenerator();
8
9console.log(gen.next().value); // 1
10console.log(gen.next().value); // 2
11console.log(gen.next().value); // 3
12console.log(gen.next().done); // true (Iteration finished)
function* myGenerator()
দিয়ে একটি জেনারেটর ফাংশন সংজ্ঞায়িত করুন।yield
কীওয়ার্ড একটি মান ফেরত দেওয়ার সময় ফাংশনের এক্সিকিউশন থামিয়ে দেয়।- প্রতিবার
next()
মেথড কল করা হলে জেনারেটর ফাংশনের এক্সিকিউশন পুনরায় শুরু হয় এবং পরবর্তীyield
-এ অগ্রসর হয়।
next()
পরবর্তী মান এবং একটি done
প্রপার্টি সহ একটি অবজেক্ট ফেরত দেয়। done
যদি true
হয়, তা নির্দেশ করে যে সব মান তৈরি করা হয়েছে এবং জেনারেটরের প্রসেসিং সম্পন্ন হয়েছে।
জেনারেটর ফাংশনের প্রয়োগ
জেনারেটর ফাংশন ব্যবহার করে ধারাবাহিক প্রক্রিয়ার সহজ উপস্থাপনা সম্ভব। নিচের উদাহরণে, আমরা একটি জেনারেটর ফাংশন তৈরি করেছি যা সংখ্যার একটি ক্রম তৈরি করে।
1function* sequenceGenerator(start: number = 0, step: number = 1) {
2 let current = start;
3 while (true) {
4 yield current;
5 current += step;
6 }
7}
8
9const seq = sequenceGenerator(1, 2);
10
11console.log(seq.next().value); // 1
12console.log(seq.next().value); // 3
13console.log(seq.next().value); // 5
- এই উদাহরণে,
sequenceGenerator
একটি অসীম ক্রমবর্ধমান সংখ্যার ক্রম তৈরি করে। প্রতিটি ধাপে মান ফেরত দিতেyield
ব্যবহার করুন এবং পরবর্তী কলগুলিতে পরবর্তী মান তৈরি করুন।
next
-এ মান প্রেরণ
next()
মেথড একটি মান গ্রহণ করতে পারে, যা জেনারেটর ফাংশনে পাঠানো যেতে পারে।
1function* adder() {
2 const num1 = yield;
3 const num2 = yield;
4 yield num1 + num2;
5}
6
7const addGen = adder();
8addGen.next(); // Initialization
9addGen.next(5); // Set 5 to num1
10const result = addGen.next(10).value; // Set 10 to num2 and get result
11console.log(result); // 15
- এই উদাহরণে,
next(5)
এবংnext(10)
তাদের নিজ নিজ মান জেনারেটর ফাংশনে পাঠায়, এবংyield num1 + num2
তাদের যোগফল ফেরত দেয়।
return
এবং throw
return(value)
জেনারেটর বন্ধ করতে পারে এবং নির্দিষ্ট মান ফেরত দিতে পারে।throw(error)
জেনারেটরের ভিতরে একটি এক্সেপশন জেনারেট করতে পারে, যা জেনারেটরের মধ্যে এক্সেপশন হ্যান্ডেল করতে ব্যবহৃত হয়।
1function* testGenerator() {
2 try {
3 yield 1;
4 yield 2;
5 } catch (e) {
6 console.error("Error caught:", e);
7 }
8}
9
10const gen = testGenerator();
11console.log(gen.next().value); // 1
12gen.throw(new Error("An error occurred!")); // Error caught: An error occurred!
- এই উদাহরণে,
throw
মেথড ব্যবহার করে জেনারেটরের ভিতরে একটি ত্রুটি তৈরি করা হয়েছে, এবং সেই ত্রুটি জেনারেটরের মধ্যে ধরা হয়।
টাইপস্ক্রিপ্টে টাইপ সংজ্ঞা
জেনারেটর ফাংশনের টাইপ সংজ্ঞা নিম্নলিখিত বিন্যাসে নির্দিষ্ট করা যেতে পারে।
1// Generator<YieldType, ReturnType, NextType>
2function* myGenerator(): Generator<number, void, unknown> {
3 yield 1;
4 yield 2;
5 yield 3;
6}
- আপনি টাইপগুলি
Generator<YieldType, ReturnType, NextType>
আকারে নির্দিষ্ট করেন।YieldType
হল সেই মানের ধরন যাyield
দ্বারা ফিরিয়ে দেয়া হয়।ReturnType
হল সেই মানের ধরন যাreturn
দ্বারা ফিরিয়ে দেয়া হয়।NextType
হল সেই মানের ধরন যাnext()
এ পাঠানো হয়।
নিম্নলিখিত উদাহরণে, টাইপ সহ জেনারেটর সুরক্ষিতভাবে ব্যবহারের জন্য নির্দিষ্ট টাইপ নির্ধারণ করা হয়েছে।
1function* numberGenerator(): Generator<number, void, number> {
2 const num1 = yield 1;
3 const num2 = yield num1 + 2;
4 yield num2 + 3;
5}
6
7const gen = numberGenerator();
8
9console.log(gen.next().value); // 1
10console.log(gen.next(10).value); // 12 (10 + 2)
11console.log(gen.next(20).value); // 23 (20 + 3)
জেনারেটর এবং অ্যাসিঙ্ক্রোনাস প্রসেসিং
জেনারেটর অ্যাসিঙ্ক্রোনাস প্রসেসিংয়ের জন্যও ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, অ্যাসিঙ্ক্রোনাস কার্যক্রমের ফলাফলের জন্য অপেক্ষা করতে আপনি yield
ব্যবহার করতে পারেন এবং ওই সময়ে সিকোয়েন্সিয়াল প্রসেসিং চালিয়ে যেতে পারেন। যাইহোক, টাইপস্ক্রিপ্ট বা জাভাস্ক্রিপ্টে, async/await
বেশি সাধারণভাবে ব্যবহৃত হয়।
1function* asyncTask() {
2 const result1 = yield fetch("https://codesparklab.com/json/example1.json");
3 console.log(result1);
4
5 const result2 = yield fetch("https://codesparklab.com/json/example2.json");
6 console.log(result2);
7}
তাযদিও জেনারেটরের মাধ্যমে অ্যাসিঙ্ক্রোনাস কার্যক্রম সিকোয়েন্সিয়ালি প্রসেস করা যায়, Promises এবং async
/await
আরও সুবিধাজনক হওয়ায় সেগুলিকে অ্যাসিঙ্ক্রোনাস প্রসেসিংয়ের জন্য সাধারণত ব্যবহার করা হয় না।
সারসংক্ষেপ
- জেনারেটর ফাংশন একটি বিশেষ ফাংশন যা
function*
দিয়ে সংজ্ঞায়িত হয় এবংyield
ব্যবহার করে মান ফেরত দিতে পারে, ফাংশনের এক্সিকিউশন সাময়িকভাবে বিরত রাখার সময়। next()
ব্যবহার করে জেনারেটর পুনরায় চালু করুন এবং মান গ্রহণ করুন। অতিরিক্তভাবে, আপনিnext(value)
ব্যবহার করে জেনারেটরে মান পাঠাতে পারেন।- আপনি
return()
এবংthrow()
ব্যবহার করে জেনারেটর ফাংশন বন্ধ করতে বা ত্রুটি পরিচালনা করতে পারেন। - টাইপস্ক্রিপ্টে জেনারেটর ব্যবহার করার সময়, আপনি টাইপ সংজ্ঞা ব্যবহার করে টাইপ-নিরাপদ কোড লিখতে পারেন।
জেনারেটর হল একটি শক্তিশালী সরঞ্জাম যা আপনাকে ইটারেশন নমনীয়ভাবে নিয়ন্ত্রণ করার অনুমতি দেয়।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।