2011-12-22 9 views
13

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

ऐसा लगता है कि Functional Java और Guava सर्वश्रेष्ठ उम्मीदवार हैं। मैं क्षमताओं, आसानी से उपयोग, सीधे जावा के लिए वैचारिक निकटता, आदि के संदर्भ में उनकी तुलना में कुछ भी नहीं ढूंढ पाया है। क्या किसी को इन पुस्तकालयों के बीच अच्छी तुलना के बारे में पता है?

+1

यहां प्रश्न क्या है? आप अपने क्यू को संपादित करना चाहते हैं ताकि आप इसे और अधिक स्पष्ट कर सकें कि आप क्या पूछ रहे हैं ... \ [संपादित करें \] क्यू शीर्षक में है, हां, लेकिन आप इसे स्वयं क्यू में फिर से लिखना चाहेंगे। – BenCole

+2

गुवा सिर्फ एक जावा लाइब्रेरी है जिसमें बहुत उपयोगी उपयोगिता विधियां हैं। हां, इसमें कुछ चीजें हैं जो आपको एक कार्यात्मक शैली के तरीके में प्रोग्राम करने की अनुमति देगी, लेकिन यह वास्तव में विशेष रूप से कार्यात्मक प्रोग्रामिंग पर केंद्रित नहीं है। – Jesper

+0

नीचे दिए गए उत्तरों के लिए धन्यवाद। मैंने अमरूद के लक्ष्यों को गलत समझा था। मैंने फंक्शनल जावा को देखने में थोड़ा और समय बिताया। यह भी वर्तमान जावा वाक्यविन्यास से वजन (अभी भी) नीचे है। यह अब मुझे स्कैला की तरफ झुकने के लिए प्रेरित करता है। मुझे एहसास है कि स्कैला अधिक से अधिक मुख्यधारा बन रहा है। यहां तक ​​कि मुझे लगता है कि ज्यादातर छात्रों के लिए यह सीखना सबसे मूल्यवान होगा कि सीधे जावा में कार्यात्मक प्रोग्रामिंग कैसे करें। (जब हम कार्यात्मक प्रोग्रामिंग को "प्रतिमान" के रूप में पढ़ते हैं तो हम हास्केल का उपयोग करते हैं। मुझे संदेह है कि छात्र पर्याप्त सीखते हैं, हालांकि इसे अपने खून में ले जाना।) इससे सवाल उठता है: जावा 8 कब अपेक्षित है? – RussAbbott

उत्तर

17

अमरूद का लक्ष्य जावा में कार्यात्मक मुहावरे प्रदान नहीं करना है। Functional Explained अमरूद विकी पृष्ठ से:

अमरूद के कार्यात्मक प्रोग्रामिंग मुहावरों के अत्यधिक उपयोग , वर्बोज़ भ्रामक है, अपठनीय, और अक्षम कोड हो सकता है। ये गुवा के सबसे आसानी से (और सबसे आम तौर पर) दुर्व्यवहार किए गए हिस्सों से हैं, और आप अपने कोड "एक-लाइनर" बनाने के लिए पूर्ववर्ती लंबाई में जाते हैं, गुवा टीम रोता है।

कृपया सुनिश्चित करें कि, गुवा की कार्यात्मक उपयोगिताओं का उपयोग करते समय, चीजों को करने का पारंपरिक अनिवार्य तरीका अधिक पठनीय नहीं है। इसे लिखने का प्रयास करें। क्या वह इतना बुरा था? क्या की तुलना में यह अधिक पठनीय था कि आप कोशिश करने वाले थे?

बनाता है बहुत ज्यादा समझ अप जावा से 7 कार्यात्मक मुहावरों पर बहुत अधिक झुकाव नहीं के रूप में भूमि के ऊपर बहुत अधिक है (vertical problem देखें)। यह जावा 8 के साथ बदल जाएगा जो जावा पुस्तकालयों और कार्यक्रमों को विस्तार स्तर पर डिजाइन करने के तरीके को बदल देगा। जावा में 7 तक की समझ में आने वाली चीजें जावा 8 में कुछ हद तक निराश हो जाएंगी। इससे प्रभावी जावा और कई नए एपीआई का एक नया संस्करण प्रेरित होगा।

यदि आप कार्यात्मक प्रोग्रामिंग सिखाने की कोशिश कर रहे हैं तो यह संभवतः एक (अधिक या कम) शुद्ध कार्यात्मक भाषा से चिपकने के लिए बेहतर है। एफपी और ओओपी की एक मेलेंज (या इम्यूलेशन) की हर भाषा एक व्याकुलता होगी।

+3

मुझे उस आलेख में पिछले वाक्य को भी इंगित करना चाहिए: "जावा 7 के रूप में, जावा में कार्यात्मक प्रोग्रामिंग केवल अज्ञात वर्गों के अजीब और वर्बोज़ उपयोग के माध्यम से अनुमानित किया जा सकता है। यह जावा 8 में बदलने की उम्मीद है, लेकिन गुवा है वर्तमान में जावा 5 और ऊपर के उपयोगकर्ताओं के लिए लक्षित है। " –

6

ऊपर बताए अनुसार, गुवा सिर्फ जावा लाइब्रेरी है - जावा 5 संगत लाइब्रेरी, यहां तक ​​कि (रिलीज 11 के रूप में)। कार्यात्मक प्रोग्रामिंग पर अमरूद की स्थिति केविन बोरिलियन द्वारा समझाया गया है:

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

4

के बाद से अमरूद एक सामान्य प्रयोजन पुस्तकालय है कि कार्यात्मक मुहावरों के लिए होता है की अधिक है, और कार्यात्मक जावा विशुद्ध रूप से है जावा में कार्यात्मक मुहावरे को कार्यान्वित करने के बारे में, कार्यात्मक जावा संभवतः एफपी जैसी सुविधाओं के एक और पूर्ण सेट के साथ बेहतर फिट की तरह लगता है।

दूसरा पहलू पर, मैं अमरूद पसंद करते हैं क्योंकि यह अधिक सामान्य उद्देश्य है, और इसलिए मैं अपने आप को सुविधाओं है कि कार्यात्मक मुहावरों से संबंधित नहीं हैं के कई का उपयोग कर सकते हैं।

दोनों पुस्तकालयों (जैसा उपर्युक्त पदों में गुवा के विकी पर उल्लेख किया गया है) के साथ समस्याओं में से एक है आपके कार्यात्मक वस्तुओं के लिए अनाम आंतरिक कक्षाओं का "लंबवत शोर" है। एक अन्य लाइब्रेरी जो एनोटेशन और एपीटी के माध्यम से इसे ठीक करने का प्रयास करती है Jedi है।

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

+0

जब आप ऊर्ध्वाधर शोर का मतलब है। क्या आप वर्बोज कोडिंग के बारे में बात कर रहे हैं क्योंकि यह उन बाइटकोड क्लास फाइलों का समूह बनाने में आपके जार पुस्तकालयों में अनाम आंतरिक कक्षाओं या ओवरहेड को जोड़ने से संबंधित है? –

+0

पूर्व: गुमनाम आंतरिक कक्षाएं। –

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