- मूल विचार
- विशेषताएँ
- शुद्ध कार्य
- प्रथम श्रेणी की विशेषताएं
- प्रासंगिक पारदर्शिता
- प्रत्यावर्तन
- अचल स्थिति
- उदाहरण
- अभेद्य और घोषणात्मक दृष्टिकोण
- शुद्ध कार्य
- प्रथम श्रेणी की वस्तुओं के रूप में कार्य
- फायदा
- छोटा और समझने में आसान
- कोई नियंत्रण प्रवाह नहीं
- नुकसान
- अनुप्रयोग
- क्रियात्मक पद्धति
- ऐसी भाषाएँ जो कार्यात्मक प्रोग्रामिंग का समर्थन करती हैं
- डी
- Erlang
- हास्केल
- एमएल
- ऑब्जेक्टिव कैमल
- योजना
- संदर्भ
कार्यात्मक प्रोग्रामिंग पैटर्न प्रोग्रामिंग से मेल खाती है एक कार्यात्मक गणितीय मॉडल के बजाय एक प्रोसेसर है, जो जरूरी प्रोग्रामिंग में मुख्य अवधारणा है करने के लिए निर्देशों का स्पष्ट दृश्यों के रूप में एक कार्यक्रम का व्यवहार करते हुए कहा की अवधारणा पर आधारित है।
कार्यात्मक भाषा बयानों को निष्पादित करने के बजाय बयानों और शब्दों पर जोर देती है। इस प्रोग्रामिंग में, परिणाम केवल उन मापदंडों पर निर्भर करेगा जो स्थानीय या वैश्विक स्थिति का पालन करने वाले अन्य प्रकारों के विपरीत, एक फ़ंक्शन को दिए जाते हैं।
हास्केल कार्यात्मक प्रोग्रामिंग भाषा में मैपिंग फ़ंक्शन कैसे संचालित होता है इसका आरेख। स्रोत: प्लक द्वारा - खुद का काम, CC0 commons.wikimedia.org
इसका नाम गणितीय कार्यों से आता है, जो इनपुट के एक सेट के आउटपुट के एक सेट को असाइन करते हैं। एक गणितीय फ़ंक्शन वास्तव में कोई काम नहीं करता है, बल्कि एक प्रक्रिया के मॉडल का वर्णन करता है, एक सूत्र के माध्यम से समझाता है कि एक फ़ंक्शन में इनपुट का एक सेट क्या पैदा करता है।
मूल विचार
फ़ंक्शनल प्रोग्रामिंग जिस नींव पर आधारित थी, वह लैम्ब्डा कैलकुलस थी, जिसे फ़ंक्शंस को परिभाषित करने और लागू करने के लिए 20 वीं शताब्दी के तीसरे दशक के दौरान विकसित किया गया था। LISP 1960 में डिजाइन की गई अपनी तरह की पहली प्रोग्रामिंग भाषा थी।
हालाँकि अधिकांश प्रोग्रामिंग भाषाओं में इनपुट, आउटपुट और बाहरी चर शामिल होते हैं जिन्हें फ़ंक्शंस में सेट या उपयोग किया जा सकता है, फ़ंक्शनल प्रोग्रामिंग इससे बचती है। विचार यह है कि हर बार किसी फ़ंक्शन को समान मापदंडों के साथ कहा जाता है, इसे समान मान वापस करना चाहिए।
विशेषताएँ
कार्यात्मक प्रोग्रामिंग भाषाओं को एप्लिकेशन कहा जाता है, क्योंकि फ़ंक्शन उनके मापदंडों पर लागू होते हैं, साथ ही साथ घोषणात्मक और गैर-प्रक्रियात्मक होते हैं, क्योंकि परिभाषाएं निर्दिष्ट करती हैं कि क्या गणना की जानी है और यह कैसे गणना की जाती है।
शुद्ध कार्य
एक फ़ंक्शन शुद्ध होता है जब इसका कोई अवलोकन करने योग्य दुष्प्रभाव नहीं होता है, जैसे कि बाहरी चर को बदलना, फ़ाइल सिस्टम में परिवर्तन, और इसी तरह।
इन कार्यों को ठोस माना जाता है क्योंकि वे किसी भी चर को स्पष्ट रूप से नहीं बदलेंगे जो कोड के अन्य भागों को किसी बिंदु पर निर्भर कर सकते हैं। यह इन प्रतिबंधों के साथ कोड करने के लिए अजीब लगेगा, लेकिन इन कार्यों को नियतात्मक, पूर्वानुमेय, और रचना करने योग्य माना जाना चाहिए।
प्रथम श्रेणी की विशेषताएं
फ़ंक्शंस को उन मानों के रूप में माना जाता है जिन्हें चर को सौंपा जा सकता है, इसलिए उन्हें अन्य कार्यों से पारित किया जा सकता है और वापस किया जा सकता है। यही है, एक फ़ंक्शन का उपयोग किया जा सकता है जैसे कि यह एक पैरामीटर था या एक मूल्य के रूप में जो वापस किया जा रहा है।
इसका तात्पर्य यह है कि फ़ंक्शन को केवल फ़ंक्शन के परिणाम के बजाय इस तरह से पारित किया जा सकता है। उदाहरण के लिए, डबल (x) फ़ंक्शन पर विचार करें, जो इसके इनपुट पैरामीटर के मूल्य से दोगुना है। इस प्रकार, डबल (2) 4 लौट आएगा।
जैसा कि यह एक प्रथम श्रेणी फ़ंक्शन है, कोड (डबल (2 (2))), डबल (4) कोड के समान होगा। यह आपको एक फ़ंक्शन को दूसरे के पैरामीटर के रूप में घोंसला बनाने की अनुमति देता है, और इसी तरह।
प्रासंगिक पारदर्शिता
यह इस तथ्य को संदर्भित करता है कि इस प्रोग्रामिंग पैटर्न में असाइनमेंट स्टेटमेंट नहीं हैं। यदि आप अतिरिक्त मान संग्रहीत करना चाहते हैं, तो आपको नए चर को परिभाषित करना होगा। इसलिए, एक चर की स्थिति हर समय स्थिर होती है।
यह अवांछित प्रभावों की थोड़ी सी संभावना को समाप्त करता है, क्योंकि किसी भी चर को कार्यक्रम के निष्पादन के किसी भी बिंदु के दौरान इसके वास्तविक मूल्य से बदला जा सकता है।
प्रत्यावर्तन
कार्यात्मक प्रोग्रामिंग में "लूप" और "जबकि" लूप नहीं होते हैं। इसके बजाय, पुनरावृत्ति पुनरावृत्ति पर निर्भर करता है। पुनरावर्तन को पुनरावर्ती कार्यों का उपयोग करके लागू किया जाता है, जो आधार मामले तक पहुंचने तक खुद को दोहराव से बुलाते हैं।
अचल स्थिति
चर अपरिवर्तनीय हैं, अर्थात, एक बार शुरू होने के बाद एक चर को संशोधित करना संभव नहीं है। यद्यपि आप एक नया चर बना सकते हैं, मौजूदा चर को संशोधित करने की अनुमति नहीं है।
उदाहरण
अभेद्य और घोषणात्मक दृष्टिकोण
एक उदाहरण से आप इन दृष्टिकोणों के बीच के अंतर का विश्लेषण कर सकते हैं, दोनों व्यवस्थाओं में समान संचालन कर सकते हैं, जो कि 5 से कम संख्या के लिए 5 को प्रतिस्थापित करते हुए एक सूची से विषम संख्या को फ़िल्टर करना है।
यह एक ही गणना है, एक ही परिणाम के साथ। हालाँकि, जैसा कि आप देख सकते हैं, अनिवार्य कोड क्रिया है और तुरंत स्पष्ट नहीं है। दूसरी ओर, घोषणात्मक दृष्टिकोण पठनीय और स्पष्ट है, क्योंकि यह उस पर केंद्रित है जो आप प्राप्त करना चाहते हैं।
शुद्ध कार्य
क्या शुद्ध और अशुद्ध कार्यों के रूप में परिभाषित किया गया है कुछ बुनियादी उदाहरणों के साथ स्पष्ट किया जा सकता है:
प्रथम श्रेणी की वस्तुओं के रूप में कार्य
इसका मतलब है कि उसी तरह से फ़ंक्शन का उपयोग करना जिस तरह से डेटा का उपयोग किया जाता है। इसलिए, उन्हें दूसरे फ़ंक्शन के मापदंडों के रूप में पारित किया जा सकता है। निम्नलिखित उदाहरण में, int फ़ंक्शन को मानचित्र फ़ंक्शन के पैरामीटर के रूप में पारित किया जा सकता है:
>>> सूची (नक्शा (इंट,))
उन्हें चर के लिए सौंपा जा सकता है और वापस लौटाया जा सकता है। उदाहरण के लिए, निम्नलिखित कोड में आप hello_world फ़ंक्शन को असाइन कर सकते हैं, फिर एक फ़ंक्शन के रूप में चर को निष्पादित कर सकते हैं।
फायदा
- इस पर ध्यान केंद्रित करें कि आप क्या हासिल करना चाहते हैं (घोषणात्मक) और इस पर नहीं कि इसे कैसे हासिल किया जाए (अनिवार्य)।
- उनमें असाइनमेंट स्टेटमेंट नहीं होते हैं, इसलिए वेरिएबल्स को वैल्यू दिए जाने के बाद, वे अब नहीं बदलेंगे। इसलिए, कार्यात्मक कार्यक्रमों में कोई दुष्प्रभाव नहीं होता है।
- तार्किक प्रवाह स्पष्ट है, क्योंकि राज्य कम फैला हुआ है और अंतर्निहित रूप से संशोधित नहीं है।
- आलसी मूल्यांकन की अवधारणा का समर्थन करता है, जिसका अर्थ है कि मूल्य केवल मूल्यांकन किया जाता है और आवश्यक होने पर संग्रहीत किया जाता है।
- चूंकि शुद्ध कार्य किसी भी स्थिति को नहीं बदलते हैं और पूरी तरह से इनपुट पर निर्भर हैं, इसलिए उन्हें समझना आसान है। इस तरह के कार्यों द्वारा दिया गया रिटर्न वैल्यू उनके द्वारा उत्पादित परिणाम के समान है।
- चर या किसी भी बाहरी डेटा परिवर्तन से बचने के लिए शुद्ध कार्यों की प्रकृति के कारण, संगामिति का कार्यान्वयन प्रभावी हो जाता है।
- फ़ंक्शंस को मान के रूप में माना जाता है, मापदंडों के रूप में अन्य कार्यों के लिए गुजर रहा है। इससे कोड की समझ और पठनीयता में सुधार होता है।
- शुद्ध कार्य एक बार पैरामीटर लेते हैं, जिससे अपरिवर्तनीय उत्पादन होता है। अटल मूल्यों का उपयोग डिबगिंग और परीक्षण को आसान बनाता है।
छोटा और समझने में आसान
वे कम और समझने की तुलना में आसान हैं। अध्ययनों से पता चला है कि कोड की लाइनों के संदर्भ में औसत प्रोग्रामर उत्पादकता किसी भी प्रोग्रामिंग भाषा के लिए कम या ज्यादा है, उच्च उत्पादकता में अनुवाद।
कोई नियंत्रण प्रवाह नहीं
किसी फ़ंक्शन को कॉल करना उसके परिणाम की गणना से अलग प्रभाव नहीं कर सकता है। यह त्रुटियों के एक प्रमुख स्रोत को नियमबद्ध करता है, निष्पादन के क्रम को भी अप्रासंगिक बना देता है, क्योंकि कोई भी दुष्प्रभाव अभिव्यक्ति के मूल्य को नहीं बदल सकता है, और इसका मूल्यांकन कभी भी किया जा सकता है।
नियंत्रण के प्रवाह को स्थापित करने के बोझ से प्रोग्रामर को राहत मिलती है। चूंकि किसी भी समय अभिव्यक्तियों का मूल्यांकन किया जा सकता है, चर को उनके मूल्यों से बदला जा सकता है।
यह स्वायत्तता कार्यात्मक कार्यक्रमों को पारंपरिक कार्यक्रमों की तुलना में गणितीय रूप से प्रबंधनीय बनाती है।
नुकसान
- कार्यात्मक प्रोग्रामिंग प्रतिमान सरल नहीं है, इसलिए एक शुरुआत को समझना मुश्किल है।
- इसे बनाए रखना मुश्किल है, क्योंकि एन्कोडिंग के दौरान कई ऑब्जेक्ट विकसित होते हैं।
- कुछ मामलों में, शुद्ध कार्य लिखने से कोड की पठनीयता में कमी आती है।
- पुनरावृत्ति के साथ संयोजन में अपरिवर्तनीय मूल्यों से सिस्टम प्रदर्शन में भारी कमी हो सकती है।
- पुन: उपयोग बहुत जटिल है और निरंतर रीफैक्टरिंग की आवश्यकता होती है।
- लूप या लूप का उपयोग करने के बजाय एक पुनरावर्ती शैली में कार्यक्रम लिखना बहुत कठिन काम हो सकता है।
- वस्तुएं समस्या का सही प्रतिनिधित्व नहीं कर सकती हैं।
- हालांकि शुद्ध कार्य लिखना सरल होता है, बाकी एप्लिकेशन और इनपुट / आउटपुट ऑपरेशन के साथ उनका संयोजन करना काफी कठिन होता है
अनुप्रयोग
आर्टिफिशियल इंटेलिजेंस प्रोग्रामिंग कार्यात्मक प्रोग्रामिंग भाषाओं में की जाती है और आर्टिफिशियल इंटेलिजेंस तकनीक वास्तविक दुनिया के अनुप्रयोगों में स्थानांतरित हो जाती है।
यह जटिल गणितीय मॉडल के कार्यान्वयन में भी उत्कृष्टता प्राप्त करता है। इस कारण से, कार्यात्मक भाषाओं का मुख्य उपयोग पारंपरिक रूप से अकादमिक रहा है। यह निष्पादन योग्य विनिर्देशों और प्रोटोटाइप कार्यान्वयन को विकसित करने के लिए उपयोगी है।
कई कार्यात्मक भाषाएं समानांतर प्रसंस्करण को लागू करने में उत्कृष्टता प्राप्त करती हैं। यह शुद्ध कार्यों का लाभ उठाने की अपनी क्षमता के कारण है, जो हमेशा उसी मूल्य को लौटाते हैं, जिस क्रम में वे निष्पादित होते हैं।
क्रियात्मक पद्धति
WhatsApp Erlang प्रोग्रामिंग भाषा का उपयोग करता है, जो कार्यात्मक प्रोग्रामिंग मॉडल का अनुसरण करता है, इस प्रकार अपने सौ से अधिक कर्मचारियों को लगभग 1.6 बिलियन लोगों से संबंधित डेटा को संभालने की अनुमति देता है।
कार्यात्मक प्रोग्रामिंग शैली का एक अन्य महत्वपूर्ण वाहक हास्केल है। इसका उपयोग फेसबुक द्वारा अपने एंटीस्पैम सिस्टम में किया जाता है। यहां तक कि जावास्क्रिप्ट, सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषाओं में से एक, गतिशील रूप से टाइप की गई कार्यात्मक भाषा के गुणों को दिखाती है।
ऐसी भाषाएँ जो कार्यात्मक प्रोग्रामिंग का समर्थन करती हैं
डी
यह C ++ के बाद डिज़ाइन किया गया था, इसके सभी लाभों को प्राप्त करते हुए, सी के साथ संगत होने की अपनी देखी गई कमजोरियों को समाप्त करता है।
Erlang
यह अत्यधिक स्केलेबल और समवर्ती है, जो दूरसंचार और अन्य अनुप्रयोगों के लिए आदर्श बनाता है, जो अप्रत्याशित क्रम में बड़े पैमाने पर डेटा प्राप्त करते हैं।
हास्केल
यह एक शुद्ध कार्यात्मक प्रोग्रामिंग भाषा है, जो लैम्ब्डा कैलकुलस का उपयोग करती है।
एमएल
यह गणितीय, वैज्ञानिक, वित्तीय, विश्लेषणात्मक और अन्य अनुप्रयोगों में उपयोग किया जाता है। इसकी एक ताकत अन्य कार्यक्रमों को संभालने के लिए सॉफ्टवेयर बना रही है।
ऑब्जेक्टिव कैमल
यह एक ओपन सोर्स भाषा है जो कैमल पर आधारित है। यह बहुत हल्के कार्यक्रम बनाने के लिए जाता है, जिससे उन्हें अन्य भाषाओं द्वारा निर्मित की तुलना में तेजी से लोड और चलाने में मदद मिलती है।
योजना
यह LISP सिंटैक्स और ALGOL संरचना पर आधारित है। इसकी सादगी के कारण, इसे कंप्यूटर प्रोग्रामिंग के कुछ मूल सिद्धांतों को दिखाने के लिए प्रोग्राम डिजाइन के लिए एक परिचय के रूप में कई कंप्यूटर विज्ञान पाठ्यक्रमों में उपयोग किया जाता है।
संदर्भ
- कौन इस (2019) की मेजबानी कर रहा है। जानें क्रियात्मक प्रोग्रामिंग: कोडिंग की यह शैली आपके दिमाग को उड़ा देगी। से लिया गया: whoishostingthis.com
- एंड्रिया बर्टोली (2019)। कार्यात्मक प्रोग्रामिंग के लिए एक पर्याप्त परिचय। से लिया गया: dev.to
- हैकर अर्थ (2020)। कार्यात्मक प्रोग्रामिंग। से लिया गया: hackerearth.com
- क्लोजर (2020)। कार्यात्मक प्रोग्रामिंग। से लिया गया: clojure.org
- अखिल भड़वाल (2020)। कार्यात्मक प्रोग्रामिंग: अवधारणाओं, फायदे, नुकसान, और अनुप्रयोग। हैक। से लिया गया: hackr.io।
- गुरु 99 (2020)। कार्यात्मक प्रोग्रामिंग क्या है? उदाहरण के साथ ट्यूटोरियल। से लिया गया: guru99.com