सी # या जावा के लिए भेड़ का बच्चा होने का क्या कारण है? न तो भाषा उनके चारों ओर आधारित है, ऐसा लगता है कि सी # पहले से ही ऐसा करने के लिए एक और कोडिंग विधि प्रतीत होती है।
मैं टकराव नहीं कर रहा हूं, अगर कोई कारण है तो मैं कारण जानना चाहूंगा। पूर्ण प्रकटीकरण के उद्देश्य के लिए मैं एक जावा प्रोग्रामर हूं जिसमें सी ++ पृष्ठभूमि है, जिसमें कोई लिस्पी अनुभव नहीं है, मैं बस बिंदु खो सकता हूं।सी # या जावा के लिए लैम्बडास के लिए क्या कारण है?
उत्तर
सामान्य उपयोग-मामले हैं जिन्हें बाद में निष्पादित करने के लिए कोड के ब्लॉक को पास करने (या भंडारण) की आवश्यकता होती है। सबसे आम घटना श्रोताओं होगा। मानो या न मानो, कोड की निम्न बिट जावा में एक लैम्ब्डा-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 की इस तरह बना देता है।
मैं प्रतिनिधियों के लिए बहुत सुविधाजनक शॉर्ट-कट के रूप में सी # में लैम्बडास देखता हूं। प्रतिनिधि को परिभाषा के लिए कहीं और खोजने के बजाए जहां कोड का उपयोग किया जा रहा है, वहां कोड के लिए बहुत अधिक पठनीय है।
बेनामी फ़ंक्शंस और लैम्ब्डा सी # - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one में अलग हैं।एएसपीएक्स – johnstok
@ जोहानस्टोक - इसे इंगित करने में थोड़ा देर हो चुकी है, लेकिन वह लेख कहता है कि वे सी # कंपाइलर (जो कि ब्लॉग का लेखक है) के कार्यान्वयनकर्ता के परिप्रेक्ष्य से अलग हैं। –
लैम्बडास आपको कम वर्बोज़, अधिक अभिव्यक्तिपूर्ण कोड लिखने की अनुमति देता है। उदाहरण के लिए, list comprehensions ...
बीटीडब्ल्यू, जावा को बंद करने की संभावना का पता लगाने के लिए काम चल रहा है - इस बीच अज्ञात कक्षाओं (बदसूरत) का उपयोग करना आवश्यक है।
सिंटेक्टिक शुगर।
यह एक विचार को प्रस्तुत करने के लिए एक सुविधाजनक और अधिक पठनीय तरीका प्रदान करता है, इस मामले में एक छोटी फेंकने वाली विधि। हुड के तहत, संकलक एक प्रतिनिधि और विधि कॉल के लिए फैलता है, लेकिन यह काम करने वाली बात है, न कि आप।
सी # भाषा डिजाइन के किसी विशेष स्कूल (जावा के विपरीत, जिसे शुद्ध ओओ भाषा के रूप में छोटे आकार के रूप में डिजाइन किया गया था) के लिए शुद्धता के लिए नहीं जा रहा है। सी # सभी चीज़ों के लिए जा रहा है, और यह बहुत अच्छा है। सी # प्रोग्रामिंग की विभिन्न शैलियों में से एक को उच्च गुणवत्ता वाले, अच्छी तरह से समर्थित भाषा में एकत्रित करने के आसपास आधारित है। इसमें प्रोग्रामिंग की प्रक्रियात्मक, ऑब्जेक्ट उन्मुख, कार्यात्मक, गतिशील, तर्क, आदि शैलियों शामिल हैं। जाहिर है, अब तक प्रोग्रामिंग की गतिशील या तर्क शैली के रास्ते में बहुत कुछ नहीं है, लेकिन जल्द ही आने वाला है (गतिशील प्रोग्रामिंग सी # 4.0 के साथ आ रही है)।
सी # के मामले में, लैंबडा को LINQ को लागू करने के लिए आंतरिक रूप से उपयोग किया जाता है। आलेख देखें The Evolution Of LINQ And Its Impact On The Design Of C#
लैम्ब्डा अधिक पढ़ने योग्य कोड के लिए अनुमति देता है जिसमें वे संचालन को उन क्रियाओं का उपयोग करने की वर्तमान सी ++ विधि की बजाय उपयोग के बिंदु के करीब परिभाषित करने की अनुमति देते हैं, जिनकी परिभाषा कभी-कभी उपयोग के बिंदु से दूर होती है। (इसमें कुछ बूस्ट लाइब्रेरी शामिल नहीं हैं)। मुझे लगता है कि लैम्बडास का मुख्य बिंदु यह है कि वे कोड को समझने के लिए अधिक संक्षिप्त और आसान अनुमति देते हैं।
वे "अंतिम" विकल्प में कई मामलों में जावा द्वारा बहु थ्रेडिंग का उपयोग करके बेहतर सुरक्षा प्रदान करते हैं। तो आप multitasking के लिए त्रुटि प्रवण नहीं हैं।
- 1. स्कैला और सी # लैम्बडास के लिए डबल तीर क्यों?
- 2. सी # लैम्बडास: कैसे "नहीं * *" Dereference "को परिभाषित करने के लिए?
- 3. छवि प्रसंस्करण के लिए जावा या सी
- 4. एफ # और सी # लैम्बडास
- 5. सी ++ 0x लैम्बडास?
- 6. सी ++: :: के लिए क्या है?
- 7. जावा: क्या है "(;;) के लिए"
- 8. जावा में @Override के लिए क्या है?
- 9. क्या सी ++ के लिए स्टाइल चेकर है?
- 10. आईबीओलेट के लिए कारण
- 11. क्या जावा के लिए एलएक्सएमएल या नोकोगिरी जैसी लाइब्रेरी है?
- 12. क्या सी # के लिए गुवा है?
- 13. लैम्बडास
- 14. जावा के लिए जेटीडी या जेएसप
- 15. अधिक पाइथनिक - फ़ंक्शन संरचना, लैम्बडास, या कुछ और क्या है?
- 16. क्या मिसा सी के लिए जावा समतुल्य है?
- 17. निम्नलिखित सी # कोड के लिए जावा समतुल्य क्या है?
- 18. क्या javac जारी करने के लिए कारण बनता है चेतावनी
- 19. सी # जावा निष्पादक सेवा के लिए समकक्ष। NewSingleThreadExecutor(), या: संसाधन
- 20. क्या किसी तकनीकी कारण का उपयोग करने के लिए या सी # में var का उपयोग नहीं करने के लिए कोई तकनीकी कारण है?
- 21. क्या जावा या PHP के लिए ओडीटा सर्वर लाइब्रेरी ओडीटा का विस्तार करने के लिए है?
- 22. क्या जावा भाषा के लिए जावा पार्सर है?
- 23. क्या LINQ के लिए जावा समतुल्य है?
- 24. क्या साइगविन के लिए जावा एसडीके है?
- 25. क्या स्टेग्नोग्राफ़ी के लिए जावा लाइब्रेरी है?
- 26. सॉकेट एपीआई या सी ++ के लिए लाइब्रेरी?
- 27. क्या सी के लिए लाइब्रेरी भंडार है?
- 28. "के लिए (;;)" सी # में क्या करता है?
- 29. क्या सी के लिए कोई दुभाषिया है?
- 30. क्या सी # के लिए कोई make_tuple है?
मैं आपके उदाहरण के कारण का कारण देख सकता हूं, मैं यह भी देख सकता हूं कि यह कितना भ्रम पैदा कर सकता है जब तक कि एक व्यक्ति लम्बास को बहुत अच्छी तरह से नहीं जानता। – WolfmanDragon
असल में, मेरे अनुभव में, लैम्ब्डा समृद्ध कोड लैम्बास के बिना लिखे गए समकक्ष कोड की तुलना में डीबग करने के लिए * आसान * है। एक बार जब आप उनके चारों ओर अपना मन प्राप्त कर लेते हैं, तो वे वास्तव में बहुत सहज होते हैं, और बुद्धिमानी से उपयोग किए जाते हैं, वे थोक पर कटौती कर सकते हैं (जो स्पष्ट रूप से किसी भी कोड से संबंधित कार्य को डिबगिंग सहित मदद करता है)। –
प्रतिनिधि लैम्बडास (अज्ञात तरीकों से अधिक तुलनीय) और अभिव्यक्ति लैम्बडास के बीच सूक्ष्म अंतर भी एक बड़ा विचार है, लेकिन अच्छी पोस्ट है। –