टाइपस्क्रिप्ट में जेनेरेटर फ़ंक्शन
यह लेख टाइपस्क्रिप्ट में जेनेरेटर फ़ंक्शन्स को समझाता है।
आप जेनेरेटर फंक्शंस का उपयोग करने की मूल बातों से लेकर असिंक्रोनस प्रोसेसिंग के साथ संयोजन में उन्नत उदाहरणों तक, और कोड सैंपल के साथ सब कुछ सीख सकते हैं।
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()
का उपयोग कर सकते हैं। - टाइपस्क्रिप्ट में जेनेरेटर का उपयोग करते समय, आप टाइप डिफिनिशन का उपयोग करके टाइप-सुरक्षित कोड लिख सकते हैं।
जेनेरेटर शक्तिशाली उपकरण हैं जो आपको लचीलापन के साथ iteration को नियंत्रित करने की अनुमति देते हैं।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।