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

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 से शुरू होने वाले सहायता जनरेटर. Regenerator प्रोजेक्ट अन्य ब्राउज़र के लिए जनरेटर समर्थन प्रदान करता है और Traceur का उपयोग करना भी एक विकल्प है.

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