2010-08-16 11 views
23

मैं क्लोजर सीख रहा हूं और मैं वास्तव में इसकी कुछ विशेषताओं से प्यार करता हूं। कुछ वास्तविक "पालतू परियोजनाओं" के बारे में सोचने का समय आ रहा है और मुझे एहसास है कि मुझे यकीन नहीं है कि वास्तव में क्लोजर का उपयोग कैसे करें।क्लोजर कैसे लागू करें?

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

दूसरी तरफ, मुझे समवर्ती सुविधाओं में बड़ी क्षमता दिखाई देती है लेकिन मैं वास्तव में उन तरीकों का उपयोग करने के तरीकों पर कम हूं।

पर्याप्त पृष्ठभूमि, मेरा प्रश्न हैं:

  • Clojure और कार्यात्मक प्रोग्रामिंग का संभव अनुप्रयोगों क्या हैं? एक पालतू परियोजना के लिए क्या विचार है जो आप सुझाव दे सकते हैं कि मैंने ओओ/जावा ईई के साथ किए गए सामान को अलग-अलग वाक्यविन्यास में फिर से लिखना नहीं होगा? मैं कुछ ऐसा ढूंढ रहा हूं जो वास्तव में क्लोजर की क्षमता का फायदा उठाता है और एक ऐसे समाधान की ओर जाता है जो ओओ/संरचनात्मक प्रोग्रामिंग की तुलना में बहुत बेहतर (सिंटैक्स में नहीं) लगता है।
  • क्लोजर और जावा मिश्रण करने के लिए यह सामान्य है, या कम से कम उचित है? मेरा मतलब है कि 95% जावा प्रोजेक्ट्स में छोटे पुस्तकालयों के लिए क्लोजर का उपयोग करना या क्लोजर में लिखे गए कोर के शीर्ष पर जावा ऐप्स बनाना।

संपादित: सभी महान जवाब के लिए धन्यवाद। वे सभी वास्तव में प्रेरणादायक हैं। तो यदि आपके पास जोड़ने के लिए कुछ और है, तो आगे बढ़ें और इस तथ्य से दूर न हो कि किसी को स्वीकार कर लिया गया है।

उत्तर

17

सवाल का "पृष्ठभूमि" भाग के जवाब में:

मुझे लगता है कि आप एक बहुत "रियल दुनिया हास्केल प्रोग्रामिंग" हकदार प्रश्न के जोर्ग डब्ल्यू Mittag के answer पढ़ना चाहिए। वह कई उत्कृष्ट अंक बनाता है। असली दुनिया के मुद्दे में एफपी पर मेरे लेने के लिए पढ़ें; दो वास्तविक प्रश्नों के उत्तर के लिए क्षैतिज रेखा से पीछे स्क्रॉल करें।

कई एफपी-केंद्रित कंपनियां हैं जो वास्तव में अच्छी तरह से प्रतीत होती हैं कि वे क्या कर रहे हैं; कुछ उदाहरणों के लिए, Google जेन स्ट्रीट (ओकैमल), गैलोइस (हास्केल), फ्लाइटकास्टर (बैकएंड भारी उठाने के लिए क्लोजर; मुझे लगता है कि उनकी अगली कड़ी वर्तमान में रेल में होती है)। माना जाता है कि स्वचालित व्यापार रणनीतियां अक्सर एफपी उन्मुख भाषाओं में कोडित होती हैं; जो वास्तव में सही समझ में आ जाएगा, हालांकि मेरे पास इसकी पुष्टि करने के लिए कोई आंतरिक डेटा नहीं है। क्लोजर के साथ अतिरिक्त उदाहरणों के लिए, the list of companies on the success stories page देखें।

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


दो वास्तविक प्रश्न के लिए के रूप में:

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

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

9

कार्यात्मक प्रोग्रामिंग लगभग किसी भी कार्य पर लागू की जा सकती है। वेब अनुप्रयोग, वैज्ञानिक अनुप्रयोग, खेल, आप इसे नाम दें।

क्लोजर और जावा मिश्रण करना बहुत आम है, क्योंकि क्लोजर में आई/ओ या नेटवर्किंग जैसी चीजों के लिए कई समर्पित पुस्तकालय नहीं हैं।

जिन संगठनों में पहले से ही बहुत सारे जावा कोड हैं, वे जावा परियोजनाओं के छोटे उपखंडों के लिए क्लोजर का उपयोग कर सकते हैं।

नई परियोजनाओं के लिए, क्लोजर को उच्च स्तरीय ड्राइवर भाषा के रूप में उपयोग करने के लिए आमतौर पर अधिक प्रभावी होता है, जहां जावा पुस्तकालयों को जरूरी है।

+4

मैं यह जोड़ना चाहता हूं कि क्लोजर में पहले स्वादिष्ट स्विंग जीयूआई को दर्द हो रहा है, लेकिन वास्तव में यह बुरा नहीं है अगर आप कुछ अच्छी तरह से डिज़ाइन किए गए मैक्रोज़ का उपयोग करते हैं (धन्यवाद, स्टुअर्ट, उनमें से कुछ के लिए) , और जीयूआई में रेफरी के साथ परिवर्तन समन्वय। यानी 'एड-घड़ी' आपका मित्र है। क्लोजर काफी बहुमुखी है, और उपयोग करने के लिए काफी अच्छा है। – Isaac

5

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

3

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

तो मैं कहूंगा कि यदि आप सामाजिक कारकों की उपेक्षा करते हैं तो क्लोजर के उपयोग के मामले जावा के सुपरसैट के करीब हैं। मैं क्लोजर में लिनक्स कर्नेल मॉड्यूल लिखने की कोशिश नहीं करता हूं ...

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

मैं क्लोजर में अभी भी एक कनिष्ठ हूं, हालांकि मैं सीएल और प्रोग्रामिंग में लंबे समय से प्रोग्रामिंग कर रहा हूं, और मैंने जीवित रहने के लिए जावा लिखने में लगभग पांच साल बिताए। लेकिन मैं संभवतः बिना किसी जानकारी के जावा के क्लोजर को कुछ भी जानने के लिए पसंद करूंगा, जब तक कि कोई सामाजिक कारक शामिल न हो।

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

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

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

3

जब मैं एक नई भाषा सीखता हूं तो मुझे गेम प्रोग्राम लिखना पसंद है।

मैं क्लोजर सीखने की प्रक्रिया में हूं और स्पाइडर सॉलिटेयर प्लेयर लिखना शुरू कर दिया हूं। यदि आपने कभी स्पाइडर नहीं खेला है, तो शुरू न करें; यह बहुत additive है :-)। http://www.spidersolitaire.org/ देखें।

इस खेल लेखन में, मैं कई चीजें हैं जो मैं सीखना चाहता हूँ उपयोग करने के लिए हो रही है: कार्यात्मक प्रोग्रामिंग, संगामिति, जावा इंटरॉप (स्विंग के लिए), आदि

मैं भी एक Bejeweled खिलाड़ी लेखन शुरू कर दिया है (http://www.popcap.com/games/free/bejeweled2), लेकिन गेम को स्कोर करने के लिए निश्चित नियम ढूंढने में समस्या आई है।

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