टाइपस्क्रिप्ट में जेनेरेटर फ़ंक्शन

टाइपस्क्रिप्ट में जेनेरेटर फ़ंक्शन

यह लेख टाइपस्क्रिप्ट में जेनेरेटर फ़ंक्शन्स को समझाता है।

आप जेनेरेटर फंक्शंस का उपयोग करने की मूल बातों से लेकर असिंक्रोनस प्रोसेसिंग के साथ संयोजन में उन्नत उदाहरणों तक, और कोड सैंपल के साथ सब कुछ सीख सकते हैं।

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 चैनल को भी देखें।

YouTube Video