मैं। नेट में लैम्ब्डा एक्सप्रेशंस में किस तरह "=>" का उच्चारण करता हूं


160

मैं बहुत कम ही किसी अन्य प्रोग्रामर से मिलता हूँ!

मेरा विचार जब मैंने पहली बार टोकन देखा था, तो "इसका तात्पर्य यह है कि" क्योंकि यह वही है जो इसे गणितीय प्रमाण में पढ़ेगा, लेकिन यह स्पष्ट रूप से कोई अर्थ नहीं है।

तो मैं कैसे कहूं या "=>" पढ़ूं:

IEnumerable<Person> Adults = people.Where(p => p.Age > 16)

या यह कहने का एक सहमति तरीका भी है?


6
एक बंद प्रश्न के लिए 120 अप-वोट बहुत उल्लेखनीय है।
डेट्स

मैं हमेशा उच्चारण करने के लिए तर्क में एक ही दिखने वाले ऑपरेटर के रूप में "तात्पर्य" करता हूं।
IllidanS4 चाहता है कि मोनिका

जवाबों:


149

मैं आमतौर पर उस ऑपरेटर को पढ़ते समय 'ऐसा' कहता हूं।

आपके उदाहरण में, p => p.Age> 16 को "P, जैसे कि p.Age 16 से अधिक है।"

वास्तव में, मैंने आधिकारिक लाइनक प्री-रिलीज मंचों पर यह बहुत ही सवाल पूछा, और एंडर्स हेजलबर्ग ने जवाब दिया

मैं आमतौर पर => ऑपरेटर को "बन जाता है" या "जिसके लिए" पढ़ता हूं। उदाहरण के लिए,
फंक f = x => x * 2;
फंक टेस्ट = c => c.City == "लंदन";
"x x 2" के रूप में पढ़ता है और "c जिसके लिए c.City लंदन के बराबर है"

जहाँ तक 'जाता है' - यह मेरे लिए कभी समझ में नहीं आया है। 'p' कहीं नहीं जा रहा है।

किसी को कोड पढ़ने के मामले में, फोन पर, तब तक, जब तक वे एक साथी सी # प्रोग्रामर हैं, मैं सिर्फ 'लंबा' शब्द का उपयोग करूंगा - यानी, "पी लंबोदा पी डॉट उम्र अधिक से अधिक सोलह। "

टिप्पणियों में स्टीव जेसोप ने परिवर्तनों के मामले में 'मानचित्रों' का उल्लेख किया - इसलिए एंडर्स का उदाहरण लेते हुए:

x => x * 2;

पढ़ेगा

एक्स मैप्स 2 से एक्स गुना 2।

यह इस मामले के लिए 'हो जाता है' की तुलना में कोड के वास्तविक इरादे के ज्यादा करीब लगता है।


1
यह केवल तभी सही है जब लैम्बडा को फिल्टर के रूप में उपयोग किया जा रहा हो।
एंड्रु लुविसी

4
"जाता है" एक कम अजीब प्रतिपादन है "स्टैक फ्रेम को पॉप्युलेट करता है"
पीटर

1
मुझे वास्तव में पसंद नहीं है "x x * 2 हो जाता है"; x एक इनपुट है और पूरे समय एक ही रहता है। इसे इस तरह पढ़ना एक असाइनमेंट ऑपरेशन की तरह लगता है।
जर्मेन

@ पेटर - हह, बहुत सच। =) @ जर्मेन - मैं सहमत हूं, हालांकि मैं परिवर्तनों के लिए एक बेहतर उदाहरण के बारे में नहीं सोच सकता। शायद 'ट्रांसफॉर्म टू ’?
एरिक फोर्ब्स

5
मैं उस मामले में "मैप्स" कहूंगा। वहाँ एक मामूली जोखिम है, तो सोच रहे हैं कि आप एक कंटेनर के बारे में बात कर रहे हैं, लेकिन आप इसे स्पष्ट कर सकते हैं कि पहली बार आप इसे कहते हैं, कि आपका क्या मतलब है "लैम्ब्डा ऑपरेटर, आप जानते हैं, बराबर-साइन-अधिक- की तुलना में "।
स्टीव जेसप

56

से MSDN :

सभी लैम्ब्डा अभिव्यक्तियाँ लैम्बडा ऑपरेटर => का उपयोग करती हैं, जिसे "जाता है" के रूप में पढ़ा जाता है।


7
Intersting। शायद अधिक दिलचस्प यह है कि यह VS2010 संस्करण के लिए सच था , लेकिन मार्गदर्शन को VS2012 संस्करण से हटा दिया गया है ।
ब्लेयर कॉनराड

@BlairConrad - शायद तब सच हो जब आपने अपनी टिप्पणी लिखी थी, लेकिन यह अब सभी मौजूदा वीएस संस्करणों के लिए है।
cp.engr

मैं अब उपरोक्त उत्तर में लिंक MSDN प्रलेखन में "जाता है" शब्द नहीं देखता। मुझे याद है कि 2010 के आसपास एक मेंटर ने मुझे बताया था कि लैंबडा फंक्शन को "जाना" के रूप में पढ़ा जाना चाहिए और यह है कि मैंने हमेशा इसे पढ़ा है। हालांकि, इस प्रश्न पर ठोकर, इसे "ऐसे" के रूप में पढ़ना मेरे लिए अधिक समझ में आता है।
मैट। एफसी

18

टेलीफोन पर रीडिंग कोड

एरिक लिपर्ट से:

मैं व्यक्तिगत रूप से कहूंगा कि c => c + 1 जैसा कि "देखें प्लस टू देखने के लिए जाता है"। कुछ विविधताएँ जो मैंने सुनी हैं:

एक प्रक्षेपण के लिए, (ग्राहक c) => c.Name: "ग्राहक देखें डॉट नाम देखें"

एक विधेय के लिए, (ग्राहक c) => c.Age> 21: "ग्राहक ऐसे देखते हैं कि देखिए डॉट की उम्र हॉकर की तुलना में अधिक है"


LINQ टीमों में काम करने के दौरान "मुझे जाता है" वाक्यांश सबसे अधिक सुना गया था।
डेमियनजी

15

मैंने हमेशा इसे "वैंग ऑपरेटर" कहा है :-)

"p वांग की आयु p की उम्र 16 से अधिक"


10
वह नंबरवांग है!
16

4
आप मुझे बताएंगे कि ग्रह पर कोई और इस "वांग" को कहां कहता है। मेरे पास एक टीम का सदस्य था जो मुझे बताता था कि यह एक "वांग" था और तेह इन्टरनेट पर एकमात्र स्थान जो हम में से कोई भी पा सकता है, वह इस उत्तर पर है।
क्रिस्टोफर

1
@Wartickler मैं पश्चिमी ऑस्ट्रेलिया से हूँ - हमेशा इसे वैंग ऑपरेटर कहा जाता है :-)
Aidos

7

मैंने देखा है लोग कहते हैं, "तीर।"


6
मुझे उम्मीद है कि यह एक मजाक है।
याकूब कारपेंटर

यह नहीं है - मैंने वही देखा है।
एरिक फोर्ब्स 23

1
मुझे लगता है कि "तीर" कहने वाले लोगों का यह अर्थ है: ->
डोर हाई आर्क

6
मैंने ऐसा कभी नहीं देखा। यह सुना है, हो सकता है, लेकिन नहीं देखा।
ctacke

तीर मुझे उचित लगता है क्योंकि इसका मतलब लंबोदर कलन से तीर के निशान का प्रतिनिधित्व करना था। मैंने सुना है कि अकादमिक प्रकार इसे एरो या राइट एरो कहते हैं, मैंने लेटेक्स स्लाइड्स पर हास्केल कोड को -> ऑपरेटर को एरो सिंबल में बदल दिया है।
रॉबर्ट

7

मैं "का उपयोग करता हूं" क्योंकि एक LINQ पुस्तक ने मुझे :) को बताया


5

कैसे के बारे में "नक्शे"? यह तकनीकी रूप से सटीक और यकीनन दोनों ही अधिक सटीक है (यानी "जाता है" या "बन जाता है" के साथ राज्य के परिवर्तन का कोई सुझाव नहीं है, इसकी विशेषता फ़ंक्शन के साथ सेट का कोई भी टकराव "जैसे कि" या "जिसके लिए" की तुलना में) अन्य विकल्प। हालाँकि, यदि MSDN पृष्ठ के रूप में पहले से ही एक मानक है, तो शायद आपको बस उसी के साथ जाना चाहिए (कम से कम C # कोड के लिए)।


3

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


2

मैंने इसके बारे में ज्यादा नहीं सोचा है, लेकिन मैं सिर्फ "कहने के लिए" कहता हूं। यह संक्षिप्त और संक्षिप्त है, और इसका अर्थ है कि चर को अभिव्यक्ति के लिए पारित किया गया है। मुझे लगता है कि यह अंक 2 ("दो") के साथ भ्रमित हो सकता है, लेकिन मैं बोलने के दौरान "और अधिक" जैसे "टा" का उच्चारण करता हूं। कोई भी (जो लंबोदर को जानता है, कम से कम) ने कभी मुझे बताया कि उन्होंने इसे अस्पष्ट समझा ...

// "Func f equals x to x times two"
Func f = x=> x * 2;

// "Func test equals c to c dot City equals London"
Func test = c => c.City == "London"

2

मेरा संक्षिप्त जवाब: "c 'lambda-of' e"। यद्यपि मैं "'लांबड़ा' सी 'फंक्शन' ई 'से जुड़ा हुआ हूं, लेकिन मुझे लगता है कि लैम्ब्डा-ऑफ इक्विनिकल समझौता है। विश्लेषण इस प्रकार है।

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


फोन पर कथा कोड के लिए, आप चाहते हैं कि कोई व्यक्ति नीचे अनुक्रम में कोड लिखने में सक्षम हो। यह एक समस्या है, निश्चित रूप से, लेकिन लैम्ब्डा-एरो या कुछ ऐसा है जो संभवतः आपको मिल सकता है, या शायद लैम्ब्डा-इन है, लेकिन लैम्ब्डा-इन सबसे सटीक है।

समस्या infix का उपयोग है और पूरी चीज़ और बाएँ और दाएँ भागों की भूमिका को कुछ चीज़ों के साथ कैसे नाम देना है जो कि infix जगह पर बात करने पर काम करता है।

यह एक अति-विवश समस्या हो सकती है!


मैं "ऐसा नहीं" का उपयोग नहीं करूंगा क्योंकि इसका मतलब है कि दाहिने हाथ की तरफ एक विधेय है जो बाएं हाथ की तरफ संतुष्ट होना चाहिए। यह एक दाएं हाथ की ओर से बात करने से बहुत अलग है जिसमें से बाएं हाथ की तरफ एक कार्यात्मक पैरामीटर के रूप में अमूर्त किया गया है। ("ऑल लैम्ब्डा एक्सप्रेशंस" के बारे में एमएसडीएन बयान केवल आक्रामक होने के साथ-साथ गलत भी है।)

कुछ रैंकों के बारे में "जाता है" हालांकि यह उतना ही निकट हो सकता है जितना हम प्राप्त कर सकते हैं। "गोस" का तात्पर्य एक परिवर्तन से है, लेकिन वास्तव में कुछ चर c नहीं है जो c में एक अभिव्यक्ति के लिए जाता है। एक समारोह में अमूर्त थोड़ा मायावी है। मैं इसके आदी हो सकता है, लेकिन मैं अभी भी कुछ के लिए तरस रहा हूं जो चर के अमूर्त पर जोर देता है।

चूंकि बाएं हाथ की ओर हमेशा अब तक उपयोग किए जाने वाले मामलों में एक साधारण पहचानकर्ता है [लेकिन बाद में इसे भ्रमित करने वाले एक्सटेंशन का इंतजार कर सकते हैं], मुझे लगता है कि "ग => अभिव्यक्ति" के लिए मैं "ग 'लंबो-फंक्शन' अभिव्यक्ति पढ़ूंगा। "" या यहां तक ​​कि "c 'arg' 'फ़ंक्शन' अभिव्यक्ति '। अंतिम स्थिति में, मैं तब "b 'arg' c 'arg' 'function' एक्सप्रेशन 'जैसी बातें कह सकता था।

इसे और भी स्पष्ट करने के लिए बेहतर हो सकता है कि एक लैम्ब्डा-एक्सप्रेशन पेश किया जा रहा है और "आर्ग 'बी' आरजी 'सी' फंक्शन 'एक्सप्रेशन" जैसा कुछ कहें।

यह पता लगाना कि इन सभी का अन्य भाषाओं में अनुवाद कैसे किया जाता है, यह छात्र [? <) के लिए एक अभ्यास है।

मुझे अभी भी "(बी, सी) => अभिव्यक्ति" और अन्य प्रकारों के बारे में चिंता है जो पहले से ही नहीं होने पर अस्तित्व में आ सकते हैं। शायद "'आर्ग्स' बी, सी 'फंक्शन' एक्सप्रेशन"।


इस सभी पेशी के बाद, मैंने नोटिस किया कि मैं "c => e" का अनुवाद करने के लिए "lambda 'c' फ़ंक्शन 'e" के रूप में आ रहा हूं और ध्यान दे रहा हूं कि सटीक रूप में मैपिंग को संदर्भ द्वारा समझा जाना है: λc (e) ), सी => ई, एफ जहां एफ (सी) = ई, आदि।

मुझे उम्मीद है कि "गो-टू" स्पष्टीकरण केवल इसलिए प्रबल होगा क्योंकि यह एक प्रमुख बहुमत पहली बार लैंबडा अभिव्यक्ति देखने जा रहा है। वह अफसोस की बात है। एक अच्छा समझौता " ई" का ' लम्बडा-ऑफ ' हो सकता है।


1
'' मैं "ऐसे" का उपयोग नहीं करूंगा क्योंकि इसका मतलब है कि दाहिने हाथ की तरफ एक विधेय है '' - जब इसे एक विधेय के रूप में इस्तेमाल किया जा रहा है, तो यह एक वैध अनुवाद है, जब तक कि मैं आपको गलत नहीं समझ रहा हूं।
एरिक फोर्ब्स

2

यदि आप एक विचित्र अभिव्यक्ति की कल्पना करते हैं, जो कि गुमनाम पद्धति है, तो "जाता है" सभ्य अर्थ को पर्याप्त बनाता है।

(n => n == String.Empty)

n "इस अभिव्यक्ति n == स्ट्रिंग" पर जाता है। खाली।

यह अनाम पद्धति पर जाता है, इसलिए आपको कोड में विधि पर जाने की आवश्यकता नहीं है!

उसके लिए खेद है।

ईमानदारी से, मुझे अपने सिर में "जाता है" का उपयोग करना पसंद नहीं है, लेकिन मैंने अन्य लोगों को यह कहते हुए देखा कि यह अजीब लग रहा था, और मुझे लगा कि मैं इसे स्पष्ट कर दूंगा।


2

पूर्ववर्ती स्कोप प्राप्त करने के अलावा (सभी चर और स्थिरांक जो उस बिंदु पर कोड की एक सामान्य रेखा के लिए स्कोप हैं जहां एक लैम्ब्डा एक्सप्रेशन होता है अभिव्यक्ति के कोड के लिए उपलब्ध हैं) एक लैम्ब्डा अभिव्यक्ति अनिवार्य रूप से एक इनलाइन फ़ंक्शन के लिए सिंटैक्टिक चीनी है।

उत्पादन ऑपरेटर ("=>") के बाईं ओर के मूल्यों की सूची इस फ़ंक्शन को कॉल करने के लिए उपयोग किए गए स्टैक फ्रेम की संरचना और सामग्री में योगदान करती है। आप कह सकते हैं कि मानों की सूची पैरामीटर घोषणाओं और पारित होने वाले तर्कों दोनों में योगदान करती है; अधिक पारंपरिक कोड में ये फ़ंक्शन को कॉल करने के लिए उपयोग किए गए स्टैक फ्रेम की संरचना और सामग्री को निर्धारित करते हैं।

नतीजतन, मान "अभिव्यक्ति कोड" पर जाते हैं। क्या आप कहेंगे "" या "जाता है" के लिए स्टैक फ्रेम को परिभाषित करता है? :)

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

हालाँकि, लैंबडा एक्सप्रेशंस लिनक का एकमात्र प्रांत नहीं है और इस संदर्भ के बाहर "सामान्य रूप" का अधिक उपयोग किया जाना चाहिए।


लेकिन "क्यों" जाता है?

क्योंकि "निम्न कोड के स्टैक फ्रेम को पॉप्युलेट करता है" यह कहने के लिए बहुत लंबा है। मुझे लगता है कि आप कह सकते हैं "है / पारित कर रहे हैं"।

स्पष्ट रूप से पारित मापदंडों और कैप्चर किए गए चर के बीच एक महत्वपूर्ण अंतर (यदि मुझे सही याद है - मुझे गलत है तो सही करें) यह है कि पूर्व संदर्भ द्वारा पारित किए गए हैं और बाद के मूल्य से।


1
मैं यह नहीं देखता कि आपकी चर्चा से आपका निष्कर्ष कैसे निकलता है। दूसरी ओर, मुझे लगता है कि => कैसे बंद होने के कारण (या हो सकता है) को लागू करने के संदर्भ में पूछे गए सवाल के साथ पकड़ में आने का एक अच्छा तरीका नहीं है।
orcmid

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

1

समस्या का हिस्सा यह है कि आप इसे कैसे संरचित करते हैं, उसके आधार पर इसे अलग तरीके से पढ़ सकते हैं। यह शर्म की बात है कि यह सुंदर या रूबी के रूप में एकीकृत नहीं है।


आप कैसे कहते हैं | पाइप के समान?
dtc

इस पर किसी भी गाइड को खोजने के लिए कठिन है, लेकिन _w "प्रत्येक लेते हैं," अर्थात People.each {| व्यक्ति | put.name} बन जाता है "लोगों के साथ प्रत्येक व्यक्ति को ले लो और नाम प्रिंट करें"
एडम लाससेक

1

रूबी में, इस शब्दांश को "हैशट्रॉक" कहा जाता है और मैंने सुना है कि सी # प्रोग्रामर उस शब्द का उपयोग करते हैं (भले ही ऐसा करना गलत हो)।


0

मेरे दो सेंट:

s => s.Age > 12 && s.Age < 20

"पैरामीटर एस के साथ लैम्बडा एक्सप्रेशन { return s.Age > 12 && s.Age < 20;}" है

मुझे यह पसंद है क्योंकि यह मुझे याद दिलाता है कि लम्बाबा अभिव्यक्ति कहाँ से आती है

delegate(Student s) { return s.Age > 12 && s.Age < 20; };

=> सिर्फ एक शॉर्टकट है, इसलिए आपको प्रतिनिधि कीवर्ड का उपयोग करने की आवश्यकता नहीं है और टाइप जानकारी शामिल करें क्योंकि यह कंपाइलर द्वारा अनुमान लगाया जा सकता है।


0

परिणाम दिखाए गए उदाहरणों के लिए मेरे शब्द = = के लिए लागू होते हैं

'result = s => s.Age > 12 && s.Age < 20'

s जहां s.Age 12 से अधिक है और s.Age 20 से कम है

'result = x => x * 2'

x जहां x को 2 से गुणा किया जाता है

'result = c => c.City == "London"'

c जहां c.city "लंदन" के बराबर है

'result = n => n == String.Empty'

n जहां n एक खाली स्ट्रिंग है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.