जनरेटर - साफ़-साफ़

जेफ़ पॉस्निक
जेफ़ पॉस्निक

ECMAScript 6 ड्राफ़्ट स्पेसिफ़िकेशन में, नए JavaScript डेवलपर को पहले से ही कई सुविधाएं मिल चुकी हैं. हमने पिछली पोस्ट में कुछ नए कलेक्शन क्लास और for..of इटरेशन लूप के बारे में बताया है. इस पोस्ट में, हम कुछ ऐसी चीज़ों के बारे में बात करेंगे जो for..of लूप का इस्तेमाल करती हैं: जनरेटर फ़ंक्शन.

बेहतरीन मटीरियल का एक होस्ट पहले से मौजूद है. इसमें यह बताया गया है कि जनरेटर का इस्तेमाल क्यों और कैसे किया जाता है. कम शब्दों में कहें, तो जनरेटर कुछ खास फ़ंक्शन होते हैं, जो इटरेटर बनाते हैं. साथ ही, इटरेटर ऐसे ऑब्जेक्ट होते हैं जिनका next() तरीका होता है और उन्हें वैल्यू पाने के लिए कॉल किया जा सकता है. जनरेटर फ़ंक्शन में, कीवर्ड yield next() के लिए वैल्यू देता है. yield का इस्तेमाल करके, जनरेटर फ़ंक्शन निलंबित एक्ज़ीक्यूशन किया जाता है. इससे, स्थिति तब तक सुरक्षित रहती है, जब तक next() को फिर से कॉल नहीं किया जाता. इसके बाद, कोड वापस शुरू होता है और तब तक जारी रहता है, जब तक कि वह दूसरी वैल्यू yieldया जनरेट न हो जाए (या जनरेटर फ़ंक्शन खत्म न हो जाने तक). जनरेटर फ़ंक्शन के लिए कैननिकल इस्तेमाल के कई उदाहरण हैं, जैसे कि फ़ाइबोनाची क्रम में संख्याओं पर फिर से काम करने के लिए, उनका इस्तेमाल करना.

शुरुआत करने की शुरुआत करने से पहले, आइए JavaScript के सैंपल के बारे में गहराई से जानते हैं. इसमें, जनरेटर की मदद से काम करने से जुड़े कुछ गेटचा या “कुछ बातें” शामिल होती हैं. इस फ़ॉर्मैट में कई टिप्पणियां शामिल की गई हैं. कोड के लाइव वर्शन को पढ़ने से पहले, इस पर इसका इस्तेमाल किया जा सकता है:

आइए जानते हैं कि इस कोड से आपको कौनसी खास बातें पता चलेंगी?

सबसे पहले, जनरेटर बनाने से, इसकी अपनी अलग स्थिति के साथ एक यूनीक इटरेटर बन जाता है. साथ ही, आपके पास जनरेटर कंस्ट्रक्टर को ऐसे पैरामीटर पास करने का विकल्प होता है जो व्यवहार को कंट्रोल कर सकें.

दूसरा, इटरेटर के next() तरीके को कॉल करते समय, किसी पैरामीटर को पास किया जा सकता है. यह वैल्यू, पिछले इटरेटर को शुरू करने वाले पिछले इवेंट के yield स्टेटमेंट की बाईं ओर मौजूद वैल्यू को असाइन हो जाएगी. यह इटरेटर के आउटपुट में बदलाव करने का एक शानदार तरीका है—यहां हम इसका इस्तेमाल यह कंट्रोल करने के लिए करते हैं कि जो शब्द दिखाया गया है वह अपरकेस में है या नहीं. अगर आपको मिलने वाली पहली वैल्यू को प्रभावित करना है, तो इसे जनरेटर के कंस्ट्रक्टर के पैरामीटर से करें.

आखिर में, जनरेटर सीमित या इनफ़ाइनाइट पुनरावर्तक बना सकते हैं. अगर इन्फ़ाइनाइट इरेटर के साथ काम किया जा रहा है, तो पक्का करें कि आपके पास yielded वैल्यू के आधार पर कोई टर्मिनल कंडिशन हो. इंफ़ाइनाइट लूप, गलती से बहुत आसान होते हैं. खास तौर पर, इटरेशन के लिए for..of का इस्तेमाल करते समय. अगर आपने next() को कॉल करके, सीमित इटरेटर का इस्तेमाल किया है, तो ऑब्जेक्ट की .done प्रॉपर्टी से पता चलता है कि इटरेशन पूरा हुआ है या नहीं.

हमें उम्मीद है कि वेब पर उपलब्ध अन्य संसाधनों के साथ, यह सैंपल आपको रोमांचित करेगा. इससे आपको यह सोचने में मदद मिलेगी कि अपने कोड में जनरेटर का इस्तेमाल कैसे किया जा सकता है. Firefox के वर्शन 31 से और Chrome के 39 वर्शन से शुरू होते हैं जो मूल रूप से काम करते हैं. रीजनरेटर प्रोजेक्ट अन्य ब्राउज़र के लिए जनरेटर सहायता देता है और Traceur इस्तेमाल करना भी एक विकल्प है.

इस लेख को पढ़ने में मदद करने के लिए, एरिक आर्विडसन का धन्यवाद.