2009-03-07 2 views
5

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

लेकिन यह एक विशिष्ट उद्यम आवेदन जहां व्यापार के नियम का एक बहुत है, लेकिन बहुत ज्यादा नहीं गणना की दृष्टि से देखते हैं के लिए कार्यात्मक प्रोग्रामिंग का उपयोग करने के बुद्धिमान है?

तथ्य बहुत कम कार्यात्मक प्रोग्रामिंग उपयोग कर रहे हैं कि उपेक्षा और यह एक तरह से कठिन है कि कृपया।

धन्यवाद

+0

हास्केल कठिन है। क्लोजर और स्कैला और उस तरह की भाषाएं आसान हैं। – Rayne

+0

ऐसा लगता है कि मैं स्पष्ट हूं। मैंने हटाने के लिए अपना उत्तर – Sruly

उत्तर

2

कार्यात्मक प्रोग्रामिंग भाषाओं काफी कुछ भी के लिए अच्छे हैं। हास्केल के लिए, एक अनुभवी हास्केल प्रोग्रामिंग शायद किसी भी समस्या के लिए किसी भी भाषा के साथ हास्केल को प्रतिस्थापित करने में सक्षम होगी - कुशल या नहीं। मुझे नहीं पता कि एक कार्यात्मक प्रोग्रामिंग भाषा है जिसे इस विशिष्ट समस्या के लिए सभी भाषाओं में/सर्वोत्तम/माना जा सकता है, लेकिन बाकी ने इसे आश्वासन दिया है कि काम करेगा और उस पर बहुत अच्छा होगा।

इसके अलावा, Clojure और स्काला JVM पर लागू किया जाता है। तो तकनीकी रूप से वे/एक उद्यम मंच पर हैं।

0

कार्य नहीं करते हैं तो व्यवसाय नियम क्या हैं? डेटा के एक सेट में फ़ंक्शन को लागू करने के रूप में नियमों का उपयोग व्यक्त किया जा सकता है। इसे बहुरूपता के साथ भी जोड़ा जा सकता है। जैसे सामान्य कार्यों के माध्यम से (एकाधिक प्रेषण भी आसान हो सकता है) और विरासत।

कोड डेटा है, डेटा कोड है, और दोनों पानी की तरह होना चाहिए। Clojure और स्काला की तरह

+0

व्यवसाय नियमों को आम तौर पर अन्य ऑब्जेक्ट्स डेटा और व्यवहार के लिए संपार्श्विक प्रभाव के रूप में व्यक्त किया जाता है: "महीने के अंत में, प्रक्रिया एक्स को चलाएं लेकिन वाई, और ऑब्जेक्ट जेड को ऐसा करना चाहिए। लेकिन अगर अधिसूचना एल सरकार से प्राप्त किया गया है, सामान्य प्रक्रिया में एक्स को चलाने की प्रक्रिया करें। " –

+0

आप उस गड़बड़ को एक कार्यात्मक तरीके से बदल सकते हैं, लेकिन फिर अंतिम कोड के साथ चश्मा की समान समानता होती है। साथ ही सरकार और कंपनी की नीतियों में बदलाव के साथ इन नियमों में निरंतर परिवर्तन होता है। अब पाखंडी आती है: मुझे इस सामान्य परिदृश्य में ओओपी से बेहतर प्रक्रियात्मक कोड अनुकूलन मिला है। –

+0

प्रोग्राम के प्रवाह को बदलना आसान है जब आप प्रोग्रामेटिक रूप से कार्यों पर काम कर सकते हैं। मुझे लगता है कि यहां भ्रम कुछ (कई?) लोगों की सभी अंतर्निहित-प्रतिमान धर्मों के पीछे मूल पदार्थ को देखने में असमर्थता से उत्पन्न होता है। – Svante

0

मैं जब आप व्यापार के नियम आप अनुप्रयोग विकास के बारे में सोच रहे हैं की एक बहुत कुछ के बारे में बात मान। इस क्षेत्र में अनुप्रयोग विकास कि आप एक असली दुनिया वर्कफ़्लो मॉडल करना चाहते हैं। वेनिला प्रोग्रामिंग के विपरीत, एप्लिकेशन विकास में जिम्मेदारी के उच्च स्तर शामिल हैं (विशेष रूप से आवश्यकता कैप्चरिंग और परीक्षण के लिए)। यदि ऐसा है, तो मैं दृढ़ता से सुझाव देता हूं कि आप डोमेन संचालित विकास लागू कर सकते हैं या नहीं। डोमेन संचालित विकास के लिए एक प्राकृतिक विकल्प एक वस्तु उन्मुख दृष्टिकोण है। यह और तथ्य यह है कि ऑब्जेक्ट उन्मुख प्रोग्रामिंग पर बहुत सारे प्रोग्रामर सभ्य हैं, एप्लिकेशन विकास में इसकी लोकप्रियता का एक कारण है। हालांकि, इसका मतलब यह नहीं है कि असली दुनिया, बड़े पैमाने पर परियोजनाओं को हमेशा इस तरह लिखा जाता है (http://www.paulgraham.com/avg.html पढ़ें)।

1

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

व्यक्तिगत रूप से मुझे हास्केल में एक ही स्पष्टता नहीं मिल सका, जिसमें मैं ओओ + कार्यात्मक दृष्टिकोण को सी # के साथ धक्का दे सकता हूं, लेकिन ऐसा इसलिए हो सकता है क्योंकि मैंने हास्केल के साथ बहुत कुछ नहीं किया है और सी # के साथ बहुत कुछ नहीं किया है।

फिर ग्राहक के साथ संवाद करने की बात है। मेरा अनुभव यह है कि उनमें से कई सख्ती से क्रोनोलॉजिकल शब्दों में सोचते हैं, किस तरह के अनिवार्य प्रोग्रामिंग का पक्ष लेते हैं। राज्य परिवर्तनों के मॉडल में जाने पर भी। आप अजीब ग्राहक खो सकते हैं। फ़ंक्शन रचनाओं और मोनैड के साथ सोचकर जो व्यवसाय के कालक्रम संबंधी संचालन का प्रतिनिधित्व कर सकते हैं, शायद कई ग्राहकों से परे हो सकते हैं।

किसी भी तरह से, आप मेरा व्यवसाय-वाई उदाहरण here पा सकते हैं।

+1

आपको अपने मोनैडिक बाइंड ऑपरेटर को ग्राहक को समझाने की आवश्यकता नहीं है, लेकिन आप उसे "ऐसा" खंड में व्यक्त व्यवसाय नियम दिखा सकते हैं जिसे वह समझ सकता है, क्योंकि अब यह उसकी भाषा में लिखा गया है। –

1

जो मैंने देखा है, स्कैला ऐसा लगता है कि यह सामान्य जावा को ठीक से संभालता है।इसलिए, कुछ भी जो जावा व्यवसाय के लिए संभाल सकता है, स्कैला भी हो सकता है।

नेट तरफ, एफ # एक कार्यात्मक भाषा है कि "व्यापार" अनुप्रयोगों के लिए ठीक काम करता है की एक और महान उदाहरण है। इसे सरलता से रखने के लिए, एफ # सब कुछ कर सकता है सी # कर सकता है, और अधिक, आसान।

लेकिन इन भाषाओं के दोनों के लिए, पक्ष "बड़े में प्रोग्रामिंग" OOP से उधार जाता है। ऐसा नहीं है कि मिश्रण करने वाली चीज़ों में कुछ भी गलत है, लेकिन संभवतया आपने जो नहीं पूछा है। यदि आप अधिक कार्यात्मक दृष्टिकोण से चिपकना चाहते हैं, और कहें, ऑब्जेक्ट्स का उपयोग न करें, तो आप थोड़ी अधिक परेशानी में भाग सकते हैं क्योंकि टूलिंग समर्थन एक ही स्तर पर नहीं होगा। उन भाषाओं के साथ जो आसानी से .NET/Java के साथ एकीकृत करते हैं, यह एक बड़ी समस्या नहीं है।

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

0

आप iTasks system जो कार्यात्मक भाषा के लिए एक पुस्तकालय साफ है और कार्यप्रवाह और व्यवसाय प्रक्रियाओं को व्यक्त करने के लिए बनाया गया है वास्तव में बाहर की जाँच कर सकते हैं।

2

लेकिन क्या एक सामान्य उद्यम अनुप्रयोग के लिए कार्यात्मक प्रोग्रामिंग का उपयोग करना बुद्धिमानी है जहां बहुत से व्यवसाय नियम हैं लेकिन गणना के मामले में बहुत कुछ नहीं है?

व्यवसाय नियम केवल गणना हैं और आप अक्सर उन्हें कार्यात्मक प्रोग्रामिंग का उपयोग करके अधिक संक्षिप्त और स्पष्ट रूप से व्यक्त कर सकते हैं।

उद्यम क्षुधा की बढ़ती संख्या कार्यात्मक भाषाओं में लिखे गए हैं। साइट्रिक्स XenDesktop और XenServer मुख्य रूप से OCaml में लिखे गए टूल स्टैक पर बनाए जाते हैं। माईलाइफ लोग सर्च इंजन ओकैमल में लिखा गया है। हम एक छोटी कंपनी हैं लेकिन हमारे सभी LOB सॉफ़्टवेयर (जैसे क्रेडिट कार्ड लेनदेन, खाते, वेब एनालिटिक्स) F # में लिखे गए हैं। बिंग उपयोग एफ # कोड पर माइक्रोसॉफ्ट के विज्ञापन। शायद सबसे स्पष्ट उदाहरण कोई भी सी # और .NET के हाल के संस्करणों का उपयोग कर रहा है क्योंकि वे लगभग निश्चित रूप से कार्यात्मक अवधारणाओं (उदा। प्रतिनिधियों) का उपयोग कर रहे हैं।

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

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