ईएस 6 में पतले-तीर फ़ंक्शन क्यों नहीं हैं?


16

ईएस 6 में वसा-तीर फ़ंक्शन ( =>) जोड़ा गया है , जिसमें सामान्य कार्यों से दो प्रमुख अंतर हैं:

  • कम सिंटैक्स (यदि आप एकल-अभिव्यक्ति बॉडी का उपयोग करते हैं तो निहित रिटर्न सहित)
  • thisआसपास के दायरे से विरासत

ये दोनों बहुत ही उपयोगी विशेषताएं हैं, लेकिन मुझे लगता है कि उनके मूल्य और अनुप्रयोग में पूरी तरह से अलग हैं - कभी-कभी मैं एक, या दूसरे, या दोनों, या न ही चाहता हूं। यह अजीब लगता है कि अगर मैं एक छोटी वाक्य रचना समारोह का उपयोग करना चाहते, मुझे लगता है कि है भी उपयोग करने के लिए this-modifying व्यवहार। और इसके विपरीत। मैं नहीं देखता कि इन दोनों क्षमताओं को भाषा के एकल जोड़ के रूप में क्यों लागू किया जाता है।

क्या होगा यदि मैं इसके निहित रिटर्न और संक्षिप्तता के लिए एक छोटे वाक्यविन्यास फ़ंक्शन का उपयोग करना चाहता हूं (किसी संदर्भ में जहां एक पूर्ण function (..) { return ...}थोड़ा कम पठनीय होगा), लेकिन मैं thisकॉलिंग संदर्भ को संदर्भित करने के लिए अपने फ़ंक्शन में उपयोग करना चाहता हूं? ऐसा करने का कोई तरीका नहीं है।

कॉफीस्क्रिप्ट में दोनों ->और =>शैली के कार्य हैं, और जाहिरा तौर पर ईएस 6 ने =>वहां से शैली उधार ली है । तो मेरा सवाल है, ES6 भी ->शैली उधार क्यों नहीं किया ?


वसा-तीर फ़ंक्शंस में अन्य अंतर हैं, जैसे वे argumentsया तो बांध नहीं सकते ।
डेडएमजी

यदि कभी-कभी आप चाहते हैं कि आसपास का दायरा है, तो आप हमेशा thisपूर्ण फ़ंक्शन घोषणा में बंद होने के लिए बाध्य कर सकते हैं । यह वह हिस्सा नहीं हो सकता है जिसके बारे में आप चिंतित हैं।
बेन

जवाबों:


25

तीर के कार्यों को जोड़ने के लिए प्रस्ताव देखें: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1

यह क्या कहता है:

हालाँकि, हम CoffeeScript के नहीं चाहते हैं ->, यह दो तीरों के लिए भ्रामक है और गतिशील यह बाइंडिंग एक बार-बार फ़ुटगन है।

आप उस प्रस्ताव के पिछले संस्करण की कुछ चर्चा भी देख सकते हैं जिसमें -> सिंटैक्स के साथ: https://esdiscuss.org/topic/arrow-function-syntax-simplified शामिल है।

यह नीचे आने के लिए प्रतीत होता है:

  1. सूक्ष्म रूप से भिन्न शब्दार्थ के साथ दो तीर वाक्यविन्यास होने से जटिलता और भ्रम बढ़ेगा।
  2. गतिशील इस फ़ंक्शन के बंधन () और ->शायद ही कभी उपयोगी समझा गया था, और एक पैर-बंदूक।
  3. यदि आपको वास्तव में इस बंधन को गतिशील बनाने की आवश्यकता है, तो आप अभी भी फ़ंक्शन () का उपयोग कर सकते हैं, शॉर्टकट सिंटैक्स होना बहुत मददगार नहीं था।

1
+1। विशेष रूप से ध्यान दें कि ES6 इन सुविधाओं को पेश करने का दूसरा प्रयास है, जिन्हें मूल रूप से ES4 में शामिल करने की योजना बनाई गई थी, लेकिन कल्पना को तब छोड़ दिया गया जब यह स्पष्ट हो गया कि प्रमुख हितधारकों ने सोचा कि यह बहुत जटिल था और पीछे की संगतता को तोड़ने की संभावना थी। इस समय समिति के लिए सब कुछ यथासंभव सरल रखना एक महत्वपूर्ण लक्ष्य होना चाहिए।
जूल्स

1
आपके उत्तर के लिए धन्यवाद, लेकिन मुझे नहीं लगता कि यह इसे कवर करता है। कम का मतलब सरल नहीं है; मुझे लगता है कि यह दो अलग-अलग फ़ंक्शन सिंटैक्स के बीच स्विच करने के लिए अधिक जटिल है, बस इस अलग-अलग तर्क को प्राप्त करने के लिए (एकल वर्ण स्विच करने की तुलना में)। "अलग-अलग शब्दार्थों के साथ कई प्रकार के कार्य करना" एक भयानक विचार नहीं है; वास्तव में हमारे पास वास्तव में यही है। और मैं यह नहीं देखता कि हम जिस चीज के बारे में बात कर रहे हैं उससे पीछे की संगतता क्या है। मैं सुझाव नहीं दे रहा हूं कि उन्हें क्लासिक फंक्शन सिंटैक्स के लिए समर्थन को हटा देना चाहिए, अगर आपका यही मतलब है
कॉलम

2
@callum, आम सहमति (कम से कम यह निर्णय लेने वाले लोगों में) की function()शैली है कि यह बंधन एक गलती थी और भाषा पर एक मस्सा है। यदि वे कर सकते थे, तो वे शब्दार्थ के function()लिए बदल =>सकते थे, लेकिन वे इसलिए नहीं कर सकते थे कि पीछे की संगतता को तोड़ दें।
विंस्टन इर्वर्ट

2
@InstonEwert हैंग कर रहे हैं, क्या आप कह रहे हैं कि निर्णय लेने वाले लोग पसंद करेंगे कि क्या वे आसपास के दायरे से function()विरासत में बदल सकते हैं ? उस मामले में, हर जगह वैश्विक वस्तु का उल्लेख नहीं होगा ? अजीब लगता है। आपने इसे कहां सुना? this=>this
कैलम

3
इसका एक स्वीकृत उत्तर हो सकता है, लेकिन यह खराब भाषा डिजाइन की तरह लगता है। यदि आपके पास एक भाषा है जिसमें वसा तीर की आवश्यकता होती है, तो एक पतला तीर भी उपलब्ध होना चाहिए। पूर्व सभी को वस्तुओं के संदर्भ में सोचना शुरू करने के लिए मजबूर करता है, जबकि उत्तरार्द्ध पहले कार्यात्मक डिजाइन के इतिहास को स्वीकार करता है, और संदर्भ को स्थगित करता है।
कोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.