सी # 3 में लैम्ब्डा सिंटैक्स इसे एक-लाइनर अज्ञात तरीकों को बनाने में वास्तव में सुविधाजनक बनाता है। वे शब्दकोष अज्ञात प्रतिनिधि वाक्यविन्यास पर एक निश्चित सुधार हैं जो सी # 2 ने हमें दिया है। हालांकि, लैम्ब्डा की सुविधा उन जगहों पर उनका उपयोग करने का एक प्रलोभन लाती है जहां हमें आवश्यक रूप से कार्यात्मक प्रोग्रामिंग अर्थशास्त्र की आवश्यकता नहीं होती है।घटना हैंडलरों के लिए Lambdas?
उदाहरण के लिए, मैं अक्सर लगता है कि मेरी ईवेंट हैंडलर्स कर रहे हैं (या कम से कम के रूप में शुरू ) सरल एक liners कि एक राज्य मान सेट एक और समारोह, या कॉल करें, या किसी अन्य वस्तु, आदि पर एक गुण सेट इनके लिए, क्या मुझे अपनी कक्षा को अभी तक एक और सरल कार्य के साथ अव्यवस्थित करना चाहिए, या क्या मुझे अपने कन्स्ट्रक्टर में घटना में लैम्बडा चाहिए?
इस परिदृश्य में lambdas के लिए कुछ स्पष्ट नुकसान कर रहे हैं:
- मैं अपने ईवेंट हैंडलर सीधे कॉल नहीं कर सकते; यह केवल घटना द्वारा ट्रिगर किया जा सकता है। बेशक, इन साधारण घटना हैंडलर के मामले में, में शायद ही कोई समय है, मुझे उन्हें सीधे पर कॉल करने की आवश्यकता होगी।
- मैं घटना से अपने हैंडलर को नहीं खोल सकता। दूसरी तरफ, शायद ही कभी मुझे ईवेंट हैंडलर को अनदेखा करने की ज़रूरत है, इसलिए यह पर कोई समस्या नहीं है।
इन दो चीजों ने मुझे बहुत परेशान नहीं किया है, कारण बताए गए हैं। और मैं उन दोनों समस्याओं को हल कर सकता हूं, यदि वे वास्तव में समस्याएं हैं, तो सदस्य प्रतिनिधि में लैम्ब्डा को संग्रहीत करके, लेकिन यह उनकी सुविधा के लिए लैम्बडा का उपयोग करने और कक्षा को अव्यवस्था के साफ रखने के उद्देश्यों को हर तरह से पराजित करेगा।
हालांकि, दो अन्य चीजें हैं, जो मुझे लगता है कि शायद इतना स्पष्ट नहीं है, लेकिन संभवतः अधिक समस्याग्रस्त है।
प्रत्येक लैम्ब्डा समारोह इसके युक्त गुंजाइश पर एक बंद रूपों। इसका मतलब यह हो सकता है कि कन्स्ट्रक्टर में पहले बनाई गई अस्थायी वस्तुएं उन संदर्भों को बनाए रखने के बंद होने के कारण ज़्यादा ज़िंदा रहती हैं। अब उम्मीद है कि कंपाइलर लैम्बडा का उपयोग नहीं करने वाले बंद होने से वस्तुओं को बाहर करने के लिए पर्याप्त स्मार्ट है, लेकिन मुझे यकीन नहीं है। क्या कोई जानता है?
सौभाग्य से, यह हमेशा एक मुद्दा नहीं है, क्योंकि मैं अक्सर अपने रचनाकारों में अस्थायी वस्तुओं को नहीं बनाता। मैं एक परिदृश्य की कल्पना कर सकता हूं जहां मैंने किया था, और जहां मैं इसे आसानी से लैम्ब्डा के बाहर नहीं छोड़ सका।
- रखरखाव का सामना करना पड़ सकता है। ज़्यादा समय। अगर मेरे पास कुछ ईवेंट हैंडलर फ़ंक्शंस के रूप में परिभाषित हैं, और कुछ को लैम्बडास के रूप में परिभाषित किया गया है, तो मुझे चिंता है कि यह बग को ट्रैक करने या कक्षा को समझने में अधिक कठिन हो सकता है। और बाद में, अगर और जब मेरे इवेंट हैंडलर का विस्तार होता है, तो मुझे या तो उन्हें कक्षा-स्तर के कार्यों में ले जाना होगा, या इस तथ्य से निपटना होगा कि मेरे कन्स्ट्रक्टर में अब कोड की एक महत्वपूर्ण मात्रा है जो मेरी कक्षा की कार्यक्षमता लागू करती है ।
तो मैं दूसरों की सलाह और अनुभव को आकर्षित करना चाहता हूं, शायद उन लोगों को जो कार्यात्मक प्रोग्रामिंग सुविधाओं के साथ अन्य भाषाओं में अनुभव के साथ आकर्षित करना चाहते हैं। क्या इस तरह की चीज के लिए कोई स्थापित सर्वोत्तम अभ्यास है? क्या आप ईवेंट हैंडलर में या अन्य मामलों में लैम्ब्डा का उपयोग करने से बचेंगे, जहां लैम्ब्डा ने अपने संलग्न क्षेत्र को काफी हद तक बढ़ाया है? यदि नहीं, तो आप किस सीमा पर लैम्ब्डा के बजाय वास्तविक कार्य का उपयोग करने का निर्णय लेते हैं? क्या उपरोक्त किसी भी नुकसान ने किसी को भी काट दिया है? क्या कोई समस्या है जिसके बारे में मैंने सोचा नहीं है?
सी # संकलक दायरे में चर की ऐक्सेस देते हैं केवल यदि आप लैम्ब्डा * में इसका इस्तेमाल करते हैं, अन्यथा, यह एक समस्या नहीं है (यह लागू होता है अज्ञात तरीकों और भेड़ के बच्चे के लिए)। –