कार्यात्मक भाषाएं क्यों? [बन्द है]


332

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


जॉन ह्यूजेस ने इस बारे में एक पेपर लिखा है: व्हाई फंक्शनल प्रोग्रामिंग मैटर्स
हेजल

जवाबों:


214

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

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

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

आधुनिक भाषाओं के बहुत सारे कार्यात्मक प्रोग्रामिंग भाषाओं से तत्व हैं। C # 3.0 में बहुत अधिक कार्यात्मक प्रोग्रामिंग विशेषताएं हैं और आप पायथन में भी कार्यात्मक प्रोग्रामिंग कर सकते हैं। मुझे लगता है कि कार्यात्मक प्रोग्रामिंग की लोकप्रियता के कारण ज्यादातर दो कारणों से हैं: सामान्य प्रोग्रामिंग में कॉन्जिबिलिटी एक वास्तविक समस्या है क्योंकि हम अधिक से अधिक मल्टीप्रोसेसर कंप्यूटर प्राप्त कर रहे हैं; और भाषाएँ अधिक सुलभ हो रही हैं।


14
आप अजगर में कार्यात्मक प्रोग्रामिंग कर सकते हैं, लेकिन यह वास्तव में भयानक है। stackoverflow.com/questions/1017621/…
गॉर्डन गुस्ताफसन

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

9
हास्केल शुद्ध कार्यात्मक भाषा का एक उदाहरण है, जिसमें आपके द्वारा कहा गया दोष नहीं है। यह वास्तव में साइड इफेक्ट्स से निपटना बहुत आसान बनाता है, क्योंकि साइड इफेक्ट्स को समझाया जाता है, और प्रोग्रामर को अनिवार्य भाषाओं की तुलना में बहुत अधिक शक्तिशाली स्तर प्राप्त करने में सक्षम बनाता है ... वास्तव में, हर किसी को हास्केल को एक कोशिश करनी चाहिए, वास्तव में इसे समझ लेना चाहिए, और महसूस करना चाहिए यह इतना शक्तिशाली क्यों है।
FtheBuilder

202

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

हालाँकि, एक कार्यात्मक शैली को लागू करने वाली भाषाएँ इन दिनों बहुत सारी आभासी स्याही प्राप्त कर रही हैं, और क्या भविष्य में वे भाषाएँ प्रभावी होंगी या नहीं, यह एक खुला प्रश्न है। मेरा खुद का संदेह है कि हाइब्रिड, मल्टी-पैराडाइम भाषाएं जैसे स्काला या ओकेएमएल संभवतः "प्यूरिस्ट" कार्यात्मक भाषाओं पर उसी तरह हावी होंगी, जैसे कि शुद्ध ओओ भाषा (स्मॉलटाक, बीटा, आदि) ने मुख्यधारा की भाषाओं को प्रभावित किया है लेकिन समाप्त नहीं किया है। सबसे व्यापक रूप से उपयोग किए जाने वाले नोटेशन के रूप में।

अंत में, मैं यह इंगित करने का विरोध नहीं कर सकता कि आपकी टिप्पणियां फिर से एफपी टिप्पणी के समानांतर हैं जो मैंने प्रक्रियात्मक प्रोग्रामर से सुनी हैं जो एक साल पहले नहीं थे:

  • (पौराणिक, IMHO) "औसत" प्रोग्रामर इसे समझ नहीं पाता है।
  • यह व्यापक रूप से सिखाया नहीं जाता है।
  • किसी भी कार्यक्रम को आप इसके साथ लिख सकते हैं वर्तमान तकनीकों के साथ एक और तरीका लिखा जा सकता है।

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


55
बस 20 साल पीछे देखो। मुझे नहीं लगता कि प्रोग्रामिंग बहुत विकसित हुई है। अच्छी तरह से बेहतर उपकरण हैं, शायद एक नई भाषा या 2 लेकिन मूल रूप से बहुत कुछ नहीं बदलेगा। इसमें 20 साल से अधिक का समय लगेगा। हम सभी ने एक बार सोचा था कि हम 2000 में उड़ने वाली कारों को देखेंगे। :)
बाईबैक

32
ओ'कमल हालांकि आयरिश है।
डिफमेटा

7
@alex अजीब: "अनुकूल अपरिवर्तनीयता" और "साइड इफेक्ट्स से बचें" वस्तु-उन्मुख और अनिवार्य प्रोग्रामिंग स्कूलों दोनों में काफी समय से अंगूठे के अच्छे नियम हैं। (तो क्या पसंद नहीं है? ;-)
joel.neely

101
@ बीबाक: 20 साल पहले हम सी कोड लिख रहे थे, और क्लिपर या टर्बो पास्कल के गुणों पर चर्चा कर रहे थे। ऑब्जेक्ट ओरिएंटेशन शिक्षाविदों का विशेष क्षेत्र था। यह प्रस्तावित करने के लिए कि थोड़ा बदल गया है बिलकुल बेतुका है।
डैनियल सी। सोबरल जूल

24
@ डैनियल: कृपया इन लोगों की एक सूची प्रदान करें, जिन्होंने क्लिपर के "गुणों" के लिए तर्क दिया था। उन्हें शिकार करने और न्याय लाने की जरूरत है।
डेविड

125

मेरे लिए मुख्य प्लस इसकी अंतर्निहित समानता है, खासकर जब हम अब अधिक मेगाहर्ट्ज से दूर जा रहे हैं और अधिक से अधिक कोर की ओर बढ़ रहे हैं।

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


4
हम पहले से ही ऐसा होते हुए देख रहे हैं। और यह भविष्य में और अधिक होगा। इसलिए मैं इस बिंदु पर 100% सहमत हूं।
जेसन बेकर

मुश्किल बात यह है कि यह एफपी का साझा कुछ भी नहीं / कोई साइड-इफेक्ट्स पहलू है जो इसे समानता के लिए उपयुक्त बनाते हैं। और वे पहलू हैं जो ओओ समाधान के साथ अच्छी तरह से नहीं बैठते हैं - प्रभावी संकर बनाना बहुत कठिन है। शायद OO नोड्स के बीच FP गोंद?
जेम्स ब्रैडी

एक प्रभावी हाइब्रिड के लिए डी प्रोग्रामिंग भाषा की 2.0 शाखा पर एक नज़र है। यह एक अल्फा / कार्य प्रगति पर है, लेकिन यह वहां हो रहा है।
dsimcha

2
मुझे यह उत्तर दिलचस्प लगा, मैं किसी भी कार्यात्मक भाषा को नहीं जानता, क्यों उन्हें समानता के लिए अधिक उचित माना जाता है?
औरंदनंद 27'09

26
चूंकि कोई साझा डेटा नहीं है, इसलिए फ़ंक्शन का कोई साइड-इफेक्ट नहीं है। आप सभी की परवाह रिटर्न मूल्य है। (यह एक ओओ / प्रक्रियात्मक प्रोग्रामर के लिए उसके सिर को गोल करने के लिए काफी कठिन विचार है।) इसलिए कई कार्यों को एक बार में बुलाया जा सकता है, जब तक कि एक से आउटपुट दूसरे के इनपुट के रूप में उपयोग नहीं किया जाता है।
टॉम स्मिथ

79

यहां तक ​​कि अगर आप पेशेवर भाषा में कभी भी काम नहीं करते हैं, तो कार्यात्मक प्रोग्रामिंग को समझना आपको बेहतर डेवलपर बना देगा। यह आपको सामान्य रूप से आपके कोड और प्रोग्रामिंग पर एक नया दृष्टिकोण देगा।

मैं कहता हूं कि इसे न सीखने का कोई कारण नहीं है।

मुझे लगता है कि कार्यात्मक और अनिवार्य शैली के मिश्रण का अच्छा काम करने वाली भाषाएँ सबसे दिलचस्प हैं और सफल होने की सबसे अधिक संभावना है।


अच्छा बिंदु है, लेकिन मैं "किस तरह से आपको बेहतर डेवलपर
बनाऊंगा

20
विभिन्न प्रोग्रामिंग प्रतिमान विभिन्न कोणों से समस्याओं का सामना करते हैं और अक्सर "सोच के अलग तरीके" या मानसिकता की आवश्यकता होती है। और सोचने के कई अलग-अलग तरीकों से खुद को प्रशिक्षित करना (सीखने का अर्थ है कि किसी को किस स्थिति में उपयोग करना है ...) कभी भी बुरी चीज नहीं है।
peSHIr

56

मैं नेक्स्ट बिग थिंग को लेकर हमेशा संशय में रहता हूं। अगली बार बहुत बड़ी बात इतिहास की शुद्ध दुर्घटना है, सही समय पर सही जगह पर होना कोई मायने नहीं रखता है कि तकनीक अच्छी है या नहीं। उदाहरण: C ++, Tcl / Tk, Perl। सभी त्रुटिपूर्ण प्रौद्योगिकियां, सभी बेतहाशा सफल रहीं क्योंकि वे या तो दिन की समस्याओं को हल करने के लिए थीं या लगभग मानकों के अनुरूप थीं, या दोनों। कार्यात्मक प्रोग्रामिंग वास्तव में बहुत अच्छा हो सकता है, लेकिन इसका मतलब यह नहीं है कि इसे अपनाया जाएगा।

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

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

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


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

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

मैंने फोर्थ और लिस्प को यूके में (साथ ही पास्कल, सी, मोडुला 2 और कोबोल) में किया था, लेकिन वह 20 साल पहले था
कोपलॉक

29
मुझे यूनी (ऑस्ट्रेलिया में) में जावा / सी ++ सिखाया गया था, लेकिन मेरे कुछ सहकर्मी विभिन्न विश्वविद्यालयों में गए, जहाँ उन्होंने हास्केल में कई इकाइयाँ कीं। यह इंट्रो के लिए प्रोग्रामिंग और उनकी अंतिम वर्ष की इकाइयों में से एक के लिए दोनों का उपयोग किया गया था। जब मैंने पहली बार कास्टिंग करने के लिए पेश होने के बाद मेरे सहकर्मी ने जावा लेक्चरर से जो कहा, उसे सुनकर मुझे हंसी आई (इस बिंदु पर वह केवल हास्केल को जानता था) - "क्या ?! तुम्हारा मतलब है कि तुम्हें कुछ मिल गया है और तुम डॉन '!!! टी पता है कि यह किस प्रकार है ?!
जैकब स्टेनली

1
टीम में उन सभी यूरोपीय लोगों के साथ C # का क्या हुआ :) :)
बेंजोल

32

मैं यहाँ कमरे में हाथी का उल्लेख करते हुए किसी को नहीं देखता, इसलिए मुझे लगता है कि यह मेरे ऊपर है :)

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

क्लोजर के साथ संयोजन के रूप में, एफपी जेएस कोड को वास्तव में हल्का बनाता है, फिर भी पठनीय है।

चीयर्स, पीएस


2
इस तरह मैंने वास्तव में कार्यात्मक प्रोग्रामिंग को खोदना शुरू कर दिया। Prototyp.js की सूची से कुछ भी बेहतर नहीं है। प्रत्येक (फ़ंक्शन (आइटम) {}) या jQuery के ऑपरेशन की पूरी विधि।
कोरी आर। किंग

20
जावास्क्रिप्ट एक कार्यात्मक तरीके से प्रोग्राम करने की अनुमति देता है। यह, हालांकि, एक क्रॉस प्रतिमान भाषा है, जो एक को विभिन्न तरीकों से प्रोग्राम करने की अनुमति देता है (जो मुझे पसंद है, लेकिन यह प्रासंगिक नहीं है) ... OO, कार्यात्मक, प्रक्रियात्मक, आदि
RHSeeger


JQuery के ऑब्जेक्ट मेथड्स सिर्फ सूची में संचालन हैं। एक वस्तु को लेना जो एक कंटेनर (या अनुक्रम) को इनपुट के रूप में प्रस्तुत करता है और एक वस्तु कंटेनर को आउटपुट के रूप में लौटाता है, यह फाम्प के व्यावहारिक सुदृढीकरण का एक अच्छा उदाहरण है।
जेरेड अपडेटाइक

25

अधिकांश अनुप्रयोग सामान्य OO तरीकों से हल किए जाने के लिए पर्याप्त सरल हैं

  1. ओओ के तरीके हमेशा "सामान्य" नहीं रहे हैं। इस दशक का मानक पिछले दशक की सीमांत अवधारणा थी।

  2. फंक्शनल प्रोग्रामिंग गणित है। लिस्प पर पॉल ग्राहम (लिस्प के लिए स्थानापन्न कार्यात्मक प्रोग्रामिंग):

तो यह 1950 के दशक की भाषा अप्रचलित क्यों नहीं है, इसकी संक्षिप्त व्याख्या यह है कि यह तकनीक नहीं थी, लेकिन गणित, और गणित बासी नहीं है। लिस्प की तुलना करने के लिए सही चीज 1950 का हार्डवेयर नहीं है, लेकिन, कहते हैं, क्विकसॉर्ट एल्गोरिथ्म, जिसे 1960 में खोजा गया था और अभी भी सबसे तेजी से सामान्य प्रयोजन है।


25

मुझे यकीन है कि जब आप उपयोग करते थे तो आपको पता नहीं था कि आप कार्यात्मक प्रोग्रामिंग थे:

  • एक्सेल सूत्र
  • क्वार्ट्ज संगीतकार
  • जावास्क्रिप्ट
  • लोगो (कछुआ ग्राफिक्स)
  • LINQ
  • एसक्यूएल
  • अंडरस्कोर.जेएस (या लोडश), डी 3

10
जावास्क्रिप्ट को कार्यात्मक प्रोग्रामिंग कैसे माना जाता है?
पचेरियर

8
इसमें प्रथम श्रेणी के कार्य, उच्च-क्रम के कार्य, क्लोजर, अनाम फ़ंक्शन, आंशिक अनुप्रयोग, करी और रचना शामिल हैं।
daniel1426

2
Haha। एक बार एक लोड चुकौती एक्सेल सूत्र लिखा था जो नेस्टेड फ़ंक्शन के साथ स्क्रीन की तुलना में व्यापक था। मुझे पता था कि तब मैं कार्यात्मक रूप से प्रोग्रामिंग कर रहा था, लेकिन मुझे अभी तक यह पता नहीं था।
प्रोफोक

7
कृपया सी को उस सूची में जोड़ें
मंदीप जंजुआ

2
@ मनदीपजंजुआ: हुह? कैसे? या फिर कोई भाषा क्यों नहीं?
एस.जे.

18

औसत कॉर्पोरेट प्रोग्रामर, उदाहरण के लिए मैं जिन लोगों के साथ काम करता हूं, उनमें से अधिकांश इसे समझ नहीं पाएंगे और अधिकांश कार्य वातावरण आपको इसमें प्रोग्राम नहीं करने देंगे

हालांकि यह एक समय की बात है। आपका औसत कॉर्पोरेट प्रोग्रामर सीखता है कि वर्तमान बिग थिंग जो भी है। 15 साल पहले, वे OOP को नहीं समझते थे। यदि एफपी पर पकड़ है, तो आपके "औसत कॉर्पोरेट प्रोग्रामर" का पालन करेंगे।

यह वास्तव में विश्वविद्यालयों में नहीं पढ़ाया जाता है (या आजकल यह है?)

बहुत कुछ बदलता है। मेरे विश्वविद्यालय में, SML सबसे पहली भाषा है जिसे छात्रों को पेश किया जाता है। मेरा मानना ​​है कि एमआईटी एलआईएसपी को प्रथम वर्ष के पाठ्यक्रम के रूप में पढ़ाता है। ये दो उदाहरण प्रतिनिधि नहीं हो सकते, बेशक, लेकिन मेरा मानना ​​है कि अधिकांश विश्वविद्यालय एफपी पर कुछ वैकल्पिक पाठ्यक्रम प्रदान करते हैं, भले ही वे इसे पाठ्यक्रम का अनिवार्य हिस्सा न बनाते हों।

अधिकांश अनुप्रयोग सामान्य OO तरीकों से हल किए जाने के लिए पर्याप्त सरल हैं

हालांकि यह वास्तव में "सरल पर्याप्त" की बात नहीं है। एफपी में एक समाधान सरल (या अधिक पठनीय, मजबूत, सुरुचिपूर्ण, प्रदर्शनकारी) होगा? कई चीजें "जावा में हल करने के लिए पर्याप्त सरल हैं", लेकिन इसके लिए अभी भी कोड की एक ईश्वरीय राशि की आवश्यकता होती है।

किसी भी मामले में, ध्यान रखें कि एफपी समर्थकों ने दावा किया है कि यह अब कई दशकों तक नेक्स्ट बिग थिंग था। शायद वे सही हैं, लेकिन ध्यान रखें कि जब वे एक ही दावा 5, 10 या 15 साल पहले नहीं करते थे।

एक बात जो निश्चित रूप से उनके पक्ष में मायने रखती है, हालांकि, यह है कि हाल ही में, सी # ने एफपी की ओर एक तीव्र मोड़ लिया है, इस हद तक कि यह व्यावहारिक रूप से प्रोग्रामर की एक पीढ़ी को एफपी प्रोग्रामर में बदल रहा है, उनके बिना भी सूचना नहीं । यह एफपी "क्रांति" का मार्ग प्रशस्त कर सकता है। शायद। ;)


एमआईटी इस्तेमाल किया अपने परिचय सीएस में योजना को पढ़ाने के लिए निश्चित रूप से, लेकिन अब यह अजगर का उपयोग करता है।
मिपाडी

1
"15 साल पहले, वे OOP को नहीं समझते थे" - समस्या यह है कि 15 साल पहले, वे FP को भी नहीं समझते थे। और वे आज भी नहीं करते हैं।
जेसन बेकर

15

मनुष्य अपनी चुनी हुई कला की पूर्णता और खामियों को नहीं समझ सकता है यदि वह अन्य कलाओं में मूल्य नहीं देख सकता है। निम्नलिखित नियम केवल तकनीक में एक बिंदु तक विकास की अनुमति देते हैं और फिर छात्र और कलाकार को अधिक सीखना और आगे की तलाश करना है। यह अन्य कलाओं के साथ-साथ रणनीति का अध्ययन करने के लिए समझ में आता है।

जिसने दूसरों की गतिविधियों को देखकर खुद के बारे में कुछ और नहीं सीखा है? तलवार सीखने के लिए गिटार का अध्ययन करें। मुट्ठी अध्ययन वाणिज्य सीखने के लिए। सिर्फ अध्ययन करने के लिए तलवार आपको संकीर्ण बना देगी और आपको बाहर की तरफ बढ़ने की अनुमति नहीं देगी।

- मियामोतो मुशी, "ए बुक ऑफ़ फाइव रिंग्स"


12

एक कार्यात्मक भाषा में एक प्रमुख विशेषता प्रथम श्रेणी के कार्यों की अवधारणा है। विचार यह है कि आप कार्यों को अन्य कार्यों के मापदंडों के रूप में पारित कर सकते हैं और उन्हें मान के रूप में वापस कर सकते हैं।

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

हास्केल इसके बजाय IO: मोनैड्स के लिए एक अलग दृष्टिकोण नियुक्त करता है। ये ऐसी वस्तुएं हैं जिनमें आपके इंटरप्रेटर के टॉपवेल द्वारा निष्पादित किए जाने वाले वांछित आईओ ऑपरेशन शामिल हैं। किसी भी अन्य स्तर पर वे सिस्टम में केवल ऑब्जेक्ट हैं।

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


12

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

OTOH, कार्यात्मक प्रोग्रामिंग वह है जो प्रोग्रामिंग को मजेदार बनाता है। यह आपको ब्रह्माण्ड के अंतर्निहित गणित की संक्षिप्त अभिव्यक्ति की अंतर्निहित, कालातीत सुंदरता की सराहना करता है। लोग कहते हैं कि कार्यात्मक प्रोग्रामिंग सीखने से आप एक बेहतर प्रोग्रामर बनेंगे। यह निश्चित रूप से अत्यधिक व्यक्तिपरक है। मुझे व्यक्तिगत रूप से नहीं लगता कि यह पूरी तरह से सच है।

यह आपको एक बेहतर भावुक बनाता है।


6
मुझे नहीं लगता कि OO, FP की तुलना में स्वाभाविक रूप से आसान है। यह वास्तव में आपकी पृष्ठभूमि पर निर्भर करता है (मैं गणित का आदमी हूं, लगता है कि मुझे क्या आसान लगता है? :) धिक्कार है आप लोगों और आपके पागल नियमों पर।
15:22 बजे temp2290

14
मोनाड को समझना मुश्किल नहीं है। उस बुलक्रैप में न खरीदें।
Rayne

-1 OOP एफपी की तुलना में कठिन है
बस किसी

-1 अगर हम एफपी केवल मैथ्स समस्याओं के लिए उपयुक्त थे, तो ओमेक्एल या हास्केल का उपयोग करके संकलक का लेखन नहीं करेंगे।
ग्रा।

8

मुझे घना होना चाहिए, लेकिन मैं अभी भी नहीं मिला। क्या एफ # जैसी कार्यात्मक भाषा में लिखे गए छोटे ऐप के कोई वास्तविक उदाहरण हैं जहां आप स्रोत कोड को देख सकते हैं और देख सकते हैं कि कैसे और क्यों इस तरह के दृष्टिकोण का उपयोग करना बेहतर था, कहते हैं, सी #?


अच्छी टिप्पणी +1। @ नोट: "अधिक सुलभ"? क्या आपको लगता है कि जब आप कोड देखते हैं तो सिरदर्द तेज होता है?
पैट्रिक होनोरेज

2
इस एफ # पुस्तकालय देखें: quanttec.com/fparsec/tutorial.html । मैं सी # में पार्सर्स के साथ नमूना कोड देखना पसंद करूंगा जो एफ # कोड के रूप में आधा सुरुचिपूर्ण और पठनीय लग रहा था, भले ही वे समान निर्देशों के लिए संकलित हों। और एफ # से एफ # सी को पोर्ट करने का प्रयास करें # और देखें कि कोड कैसे खिलता है।
जेरेड अपडेटेड

8

मैं बताता हूं कि कार्यात्मक भाषाओं के बारे में आपने जो कुछ भी कहा है, लगभग 20 साल पहले ज्यादातर लोग ऑब्जेक्ट-ओरिएंटेड लैंगगेज के बारे में कह रहे थे। वापस तो OO के बारे में सुनना बहुत आम था:

* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways

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


2
* औसत कॉर्पोरेट प्रोग्रामर, उदाहरण के लिए मैं जिन लोगों के साथ काम करता हूं, उनमें से अधिकांश इसे समझ नहीं पाएंगे और अधिकांश कार्य वातावरण आपको इसमें प्रोग्राम नहीं करने देंगे - यह अभी भी कई जगहों पर OOP का सच है, मैंने काम किया है :) (बेशक वे कहते हैं वे OOP कर रहे हैं, लेकिन वे नहीं हैं)
tolanj

7

F # पकड़ सकता था क्योंकि Microsoft इसे आगे बढ़ा रहा है।

समर्थक:

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

कॉन्ट्रा:

  • F # शुरू करना बहुत कठिन है भले ही आप C # और .Net के साथ अच्छे हों - कम से कम मेरे लिए :(
  • शायद अच्छे F # डेवलपर्स को ढूंढना मुश्किल होगा

इसलिए, मैं F # को महत्वपूर्ण बनने के लिए 50:50 का मौका देता हूं। अन्य कार्यात्मक भाषाएँ निकट भविष्य में इसे बनाने नहीं जा रही हैं।


6
मेरा तर्क है कि स्काला JRE के साथ एक बहुत गहरी नींव थी।
cdmckay

2
पुस्तकालयों के बारे में, यह वास्तव में निर्भर करता है कि आप क्या कर रहे हैं। F # को वित्त क्षेत्र पर लक्षित किया गया है और यह वैज्ञानिक कंप्यूटिंग के लिए भी लागू है लेकिन OCaml के पास वास्तव में .NET की तुलना में ऐसे अनुप्रयोगों के लिए बेहतर पुस्तकालय हैं। उदाहरण के लिए, जब मैं OCaml से F # आया तो मैं एक अच्छा FFT खोजने में विफल रहा और C # में अपना स्वयं का और फिर F # लिखना (और बेचना) समाप्त कर दिया।
जॉन हैरोप

1
LINQ C # और VB.Net के साथ कार्यात्मक अवधारणाओं का उपयोग करने के लिए एक अच्छा पुल है ... और मुझे F # की तुलना में पढ़ने के लिए यह बहुत कम दर्दनाक लगता है
मैथ्यू Whited

5

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

क्लीजुर या एफ # जैसी भाषाएं इस पर विचार करने के लिए नियम का अपवाद हो सकती हैं कि वे जेवीएम / सीएलआर पर निर्मित हैं। नतीजतन, मेरे पास उनके लिए कोई जवाब नहीं है।


+1 लेकिन मार्केटिंग की शक्ति को मत भूलना, और यह तथ्य कि आपकी कंपनी की विरासत कोड पहाड़ कुछ शांत प्रवृत्ति के गुणों द्वारा भाषाओं को स्विच करने की नहीं है।
15:22 बजे temp2290

और आप उल्लेख करना भूल गए: Google अजगर को लोकप्रिय बना रहा है।
हाओ वूई लिम

4

अधिकांश एप्लिकेशन को [अपनी पसंदीदा भाषा, प्रतिमान आदि सम्मिलित करें] में हल किया जा सकता है।

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


4

मुझे ऐसा लगता है कि जिन लोगों ने स्नातक के रूप में लिस्प या योजना कभी नहीं सीखी, वे अब इसकी खोज कर रहे हैं। इस क्षेत्र में बहुत सी चीजों के साथ प्रचार करने और उच्च उम्मीदें पैदा करने की प्रवृत्ति है ...

यह सफल हो जाएगा।

फंक्शनल प्रोग्रामिंग बढ़िया है। हालांकि, यह दुनिया को नहीं लेगा। C, C ++, Java, C #, आदि अभी भी आसपास ही होंगे।

इससे क्या होगा कि मुझे लगता है कि अधिक क्रॉस-भाषा क्षमता है - उदाहरण के लिए एक कार्यात्मक भाषा में चीजों को लागू करना और फिर अन्य भाषाओं में उस सामान तक पहुंच प्रदान करना।


1
C # अब एक कार्यात्मक प्रोग्रामिंग भाषा है (लिस्प के रूप में ज्यादा) क्योंकि इसमें प्रथम श्रेणी के शाब्दिक बंद हैं। वास्तव में, वे पहले से ही WPF और TPL में उपयोग किए जाते हैं। इसलिए कार्यात्मक प्रोग्रामिंग स्पष्ट रूप से पहले से ही यहां है।
जॉन हैरोप

4

टिम स्वीनी, एपिक गेम्स द्वारा "द नेक्स्ट मेनस्ट्रीम प्रोग्रामिंग लैंग्वेज: ए गेम डेवलपर पर्सपेक्टिव" पढ़ते समय, मेरा पहला विचार था - मुझे हास्केल सीखने को मिला।

पीपीटी

Google का HTML संस्करण


3

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

और बड़े पैमाने पर समानांतर हार्डवेयर के साथ हर किसी पर विकासवादी दबाव डालते हैं - और परिवर्तनों से निपटने के लिए सबसे अच्छी जगह में कार्यात्मक भाषाएं - यह अब तक एक छलांग नहीं है क्योंकि यह सोचना एक बार था कि हास्केल या एफ # अगली बड़ी चीज होगी।


3

क्या आप हाल ही में प्रोग्रामिंग भाषाओं के विकास का अनुसरण कर रहे हैं? सभी मुख्य धारा प्रोग्रामिंग भाषाओं की हर नई रिलीज कार्यात्मक प्रोग्रामिंग से अधिक से अधिक सुविधाओं को उधार लेती है।

  • क्लोज़र, अनाम फ़ंक्शंस, पासिंग और रिटर्निंग फ़ंक्शंस, मानों का उपयोग केवल लिस्प और एमएल हैकर्स के लिए जाने जाने वाली विदेशी सुविधाएँ थीं। लेकिन धीरे-धीरे, सी #, डेल्फी, पायथन, पर्ल, जावास्क्रिप्ट, ने बंद के लिए समर्थन जोड़ा है। किसी भी अप और आने वाली भाषा को बंद किए बिना गंभीरता से लिया जाना संभव नहीं है।

  • कई भाषाओं, विशेष रूप से पायथन, सी #, और रूबी को सूची समझ और सूची जनरेटर के लिए मूल समर्थन है।

  • एमएल ने 1973 में जेनेरिक प्रोग्रामिंग का बीड़ा उठाया, लेकिन जेनेरिक ("पैरामीट्रिक पॉलीमोर्फिज्म") के लिए समर्थन केवल पिछले 5 वर्षों में एक उद्योग मानक बन गया है। अगर मुझे सही तरीके से याद है, तो फोरट्रान ने 2003 में जेनरिक का समर्थन किया, इसके बाद जावा 2004, 2005 में सी #, 2008 में डेल्फी। (मुझे पता है कि सी ++ ने 1979 से समर्थन किया है, लेकिन सी ++ के एसटीएल पर 90% चर्चा "यहाँ राक्षस हो" से शुरू होती है। ।)

क्या इन सुविधाओं प्रोग्रामर के लिए अपील करता है? यह स्पष्ट रूप से स्पष्ट होना चाहिए: यह प्रोग्रामर को छोटे कोड लिखने में मदद करता है । यदि वे प्रतिस्पर्धी बने रहना चाहते हैं तो भविष्य में सभी भाषाएं कम से कम बंद होने का समर्थन करने जा रही हैं। इस संबंध में, कार्यात्मक प्रोग्रामिंग पहले से ही मुख्यधारा में है।

अधिकांश अनुप्रयोग सामान्य OO तरीकों से हल किए जाने के लिए पर्याप्त सरल हैं

कौन कहता है कि साधारण चीजों के लिए भी कार्यात्मक प्रोग्रामिंग का उपयोग नहीं किया जा सकता है? प्रत्येक कार्यात्मक कार्यक्रम को एक संकलक, प्रमेय कहावत, या व्यापक समानांतर दूरसंचार स्विच की आवश्यकता नहीं होती है। मैं नियमित रूप से अपने अधिक जटिल परियोजनाओं के अलावा तदर्थ फेंकने वाली लिपियों के लिए एफ # का उपयोग करता हूं।


3

इस पर पकड़ है क्योंकि यह जटिलता को नियंत्रित करने के लिए सबसे अच्छा उपकरण है। देखें:
- साइमन पेटन-जोन्स की 109-116 स्लाइड्स में "ए टेस्ट ऑफ हास्केल"
- "टिम मेनस्टी द्वारा दी गई अगली मेनस्ट्रीम प्रोग्रामिंग लैंग्वेज: ए गेम डेवलपर का पर्सपेक्टिव"



3

लिंक नहीं खुलता है। त्रुटि 403.
अलेक्सई फ्रुंज़े

यह एक अच्छा प्रतिस्थापन हो सकता है? cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
कनाडा के

डेड लिंक। यही कारण है कि इस प्रकार के उत्तर उद्धृत करने के साथ-साथ उद्धृत करने के लिए प्रतिकूल हैं।
सिल्वेस्टर

मैंने लिंक तय कर दिया है। @ सिलवेस्टर जो सच है, लेकिन इसका 23 पेज का दस्तावेज है। इस साइट पर उत्तर देने के लिए पेपर को डिस्टर्ब करने से यह न्याय नहीं होगा।
ग्रोम

2

मैं पहले बिंदु से सहमत हूं, लेकिन समय बदल जाता है। यदि वे देर से गोद लेने वाले हैं, तो निगम जवाब देंगे, यदि वे देखते हैं कि वहाँ एक फायदा होना चाहिए था। जीवन गतिशील है।

वे 90 के दशक के अंत में स्टैनफोर्ड में हास्केल और एमएल को पढ़ा रहे थे। मुझे यकीन है कि कार्नेगी मेलन, एमआईटी, स्टैनफोर्ड, और अन्य अच्छे स्कूल जैसे स्थान इसे छात्रों के सामने पेश कर रहे हैं।

मैं सहमत हूं कि अधिकांश "वेब पर रिलेशनल डेटाबेस को उजागर करते हैं" ऐप लंबे समय तक उस नस में जारी रहेंगे। Java EE, .NET, RoR और PHP ने उस समस्या के कुछ बहुत अच्छे समाधान विकसित किए हैं।

आप किसी महत्वपूर्ण चीज पर चोट कर रहे हैं: यह समस्या हो सकती है जिसे अन्य तरीकों से आसानी से हल नहीं किया जा सकता है जो कार्यात्मक प्रोग्रामिंग को बढ़ावा देगा। वो क्या हो सकता है?

क्या बड़े पैमाने पर मल्टीकोर हार्डवेयर और क्लाउड कंप्यूटिंग उन्हें साथ धकेलेंगे?


2

क्योंकि एफपी की उत्पादकता, विश्वसनीयता और स्थिरता के संदर्भ में महत्वपूर्ण लाभ हैं। कई-कोर एक किलर ऐप हो सकते हैं जो अंततः विरासत कोड के बड़े संस्करणों के बावजूद स्विच करने के लिए बड़े निगम हो जाते हैं। इसके अलावा, यहां तक ​​कि सी # जैसी बड़ी व्यावसायिक भाषाएं कई-कोर चिंताओं के परिणामस्वरूप एक अलग कार्यात्मक स्वाद ले रही हैं - साइड इफेक्ट्स संगामिति और समानता के साथ अच्छी तरह से फिट नहीं है।

मैं इस बात से सहमत नहीं हूँ कि "सामान्य" प्रोग्रामर इसे समझ नहीं पाएंगे। वे, जैसे वे अंततः ओओपी को समझ गए (जो उतना ही रहस्यमय और अजीब है, यदि ऐसा नहीं है तो)।

इसके अलावा, अधिकांश विश्वविद्यालय एफपी सिखाते हैं, कई इसे पहले प्रोग्रामिंग कोर्स के रूप में भी पढ़ाते हैं।


क्षमा करें, लेकिन ओपी लगभग 3 गुना ओओपी रहा है। यह बस अधिक समय की जरूरत का मामला नहीं है। एफपी को मुख्यधारा बनाने में कुछ और लगेगा।
जेसन बेकर

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

2

वाह - यह एक दिलचस्प चर्चा है। इस पर मेरे अपने विचार:

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


2

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

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

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


2

मेरा विचार यह है कि अब यह पकड़ लेगा कि Microsoft ने इसे मुख्यधारा में आगे बढ़ा दिया है। मेरे लिए यह आकर्षक है क्योंकि यह हमारे लिए क्या कर सकता है, क्योंकि यह एक नई चुनौती है और नौकरी के अवसरों के कारण यह भविष्य के लिए मायने रखता है।

एक बार महारत हासिल करने के बाद यह प्रोग्रामर के रूप में हमें और अधिक उत्पादक बनाने में मदद करने के लिए एक और उपकरण होगा।


2

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

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


1

अन्य उत्तरों के अलावा, शुद्ध कार्यात्मक शब्दों में समाधान की कास्टिंग समस्या को बेहतर ढंग से समझने के लिए मजबूर करती है। इसके विपरीत, एक कार्यात्मक शैली में सोचने से बेहतर * समस्या निवारण कौशल विकसित होगा।

* या तो क्योंकि कार्यात्मक प्रतिमान बेहतर है या क्योंकि यह हमले के एक अतिरिक्त कोण को वहन करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.