मैं भी यही सवाल कर रहा था और यहां आया था। पोस्ट और टिप्पणियों को पढ़ने के बाद, मुझे लगा कि एक तीर फ़ंक्शन में जनरेटर का उपयोग अस्पष्ट लगता है:
const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word
यह वह बड़ा कारण हो सकता है कि वे तीर फ़ंक्शन के संबंध में जनरेटर को लागू नहीं करते हैं।
लेकिन, अगर मैं उनमें से एक था, तो मैं इस तरह सोच सकता था:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
ऐसा लगता है जैसे हमारे पास अतुल्यकालिक फ़ंक्शन है:
const asyncFunction = async () => ... // pretty cool
क्योंकि, सामान्य फ़ंक्शन के साथ async कीवर्ड मौजूद है, इसलिए एरो फ़ंक्शन इसका उपयोग कर रहा है - async () =>
प्रतीत होने की संभावना है async function()
।
लेकिन, इसके जैसा कोई कीवर्ड नहीं है gen
या generator
अलास एरो फ़ंक्शन इसका उपयोग नहीं कर रहा है।
समाप्त करने के लिए:
भले ही वे तीर फ़ंक्शन में जनरेटर को लागू करना चाहते हैं, मुझे लगता है कि उन्हें कोर जेएस में जनरेटर सिंटैक्स के बारे में फिर से सोचने की जरूरत है:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
और यह एक बड़ी गड़बड़ी होगी। इसलिए, जनरेटर से एरो फ़ंक्शन को बाहर रखना, बहुत अच्छा है।
@Bergi टिप्पणी के बाद :
नहीं, एरो फ़ंक्शंस को हल्के-वजन वाला माना जाता है (और उदाहरण के लिए एक .prototyp नहीं है) और अक्सर एक-लाइनर, जबकि जनरेटर बहुत विपरीत हैं।
मैं कहूंगा कि उपयोग करने के लिए जनरेटर का उद्देश्य रन-स्टॉप-रन है और इसलिए मुझे नहीं लगता कि हमें प्रोटोटाइप, लेक्सस, आदि के बारे में देखभाल करने की आवश्यकता है।
function*
कथन (फ़ंक्शन कीवर्ड जिसके बाद तारांकन) एक जनरेटर फ़ंक्शन को परिभाषित करता है।"