2008-10-16 9 views
18

सी # या जावा के लिए भेड़ का बच्चा होने का क्या कारण है? न तो भाषा उनके चारों ओर आधारित है, ऐसा लगता है कि सी # पहले से ही ऐसा करने के लिए एक और कोडिंग विधि प्रतीत होती है।
मैं टकराव नहीं कर रहा हूं, अगर कोई कारण है तो मैं कारण जानना चाहूंगा। पूर्ण प्रकटीकरण के उद्देश्य के लिए मैं एक जावा प्रोग्रामर हूं जिसमें सी ++ पृष्ठभूमि है, जिसमें कोई लिस्पी अनुभव नहीं है, मैं बस बिंदु खो सकता हूं।सी # या जावा के लिए लैम्बडास के लिए क्या कारण है?

उत्तर

39

सामान्य उपयोग-मामले हैं जिन्हें बाद में निष्पादित करने के लिए कोड के ब्लॉक को पास करने (या भंडारण) की आवश्यकता होती है। सबसे आम घटना श्रोताओं होगा। मानो या न मानो, कोड की निम्न बिट जावा में एक लैम्ब्डा-ish संरचना का भी उपयोग:

JButton button = new JButton("Push me!"); 
button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Pressed!"); 
    } 
}); 

गुमनाम आंतरिक श्रेणी के एक लैम्ब्डा के रूप में काम कर रहा है, एक बहुत वर्बोज़ यद्यपि। अंतर्निहित रूपांतरण जादू का एक छोटा सा के साथ, हम स्काला में निम्नलिखित बराबर लिख सकते हैं:

val button = new JButton("Push me!") 
button.addActionListener { e => 
    println("Pressed!") 
} 

सी # बात काफी और प्रतिनिधियों के साथ आसान (और भी बेहतर) lambdas की इस तरह बना देता है।

+1

मैं आपके उदाहरण के कारण का कारण देख सकता हूं, मैं यह भी देख सकता हूं कि यह कितना भ्रम पैदा कर सकता है जब तक कि एक व्यक्ति लम्बास को बहुत अच्छी तरह से नहीं जानता। – WolfmanDragon

+5

असल में, मेरे अनुभव में, लैम्ब्डा समृद्ध कोड लैम्बास के बिना लिखे गए समकक्ष कोड की तुलना में डीबग करने के लिए * आसान * है। एक बार जब आप उनके चारों ओर अपना मन प्राप्त कर लेते हैं, तो वे वास्तव में बहुत सहज होते हैं, और बुद्धिमानी से उपयोग किए जाते हैं, वे थोक पर कटौती कर सकते हैं (जो स्पष्ट रूप से किसी भी कोड से संबंधित कार्य को डिबगिंग सहित मदद करता है)। –

+0

प्रतिनिधि लैम्बडास (अज्ञात तरीकों से अधिक तुलनीय) और अभिव्यक्ति लैम्बडास के बीच सूक्ष्म अंतर भी एक बड़ा विचार है, लेकिन अच्छी पोस्ट है। –

9

मैं प्रतिनिधियों के लिए बहुत सुविधाजनक शॉर्ट-कट के रूप में सी # में लैम्बडास देखता हूं। प्रतिनिधि को परिभाषा के लिए कहीं और खोजने के बजाए जहां कोड का उपयोग किया जा रहा है, वहां कोड के लिए बहुत अधिक पठनीय है।

+0

बेनामी फ़ंक्शंस और लैम्ब्डा सी # - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one में अलग हैं।एएसपीएक्स – johnstok

+2

@ जोहानस्टोक - इसे इंगित करने में थोड़ा देर हो चुकी है, लेकिन वह लेख कहता है कि वे सी # कंपाइलर (जो कि ब्लॉग का लेखक है) के कार्यान्वयनकर्ता के परिप्रेक्ष्य से अलग हैं। –

2

लैम्बडास आपको कम वर्बोज़, अधिक अभिव्यक्तिपूर्ण कोड लिखने की अनुमति देता है। उदाहरण के लिए, list comprehensions ...

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

4

सिंटेक्टिक शुगर।

यह एक विचार को प्रस्तुत करने के लिए एक सुविधाजनक और अधिक पठनीय तरीका प्रदान करता है, इस मामले में एक छोटी फेंकने वाली विधि। हुड के तहत, संकलक एक प्रतिनिधि और विधि कॉल के लिए फैलता है, लेकिन यह काम करने वाली बात है, न कि आप।

1

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

0

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

-2

वे "अंतिम" विकल्प में कई मामलों में जावा द्वारा बहु थ्रेडिंग का उपयोग करके बेहतर सुरक्षा प्रदान करते हैं। तो आप multitasking के लिए त्रुटि प्रवण नहीं हैं।

संबंधित मुद्दे