कार्यात्मक प्रोग्रामिंग क्या है? उदाहरण के साथ ट्यूटोरियल
कार्यात्मक प्रोग्रामिंग क्या है?
फंक्शनल प्रोग्रामिंग (जिसे FP भी कहा जाता है) शुद्ध फ़ंक्शन बनाकर सॉफ़्टवेयर निर्माण के बारे में सोचने का एक तरीका है। यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में देखी जाने वाली साझा स्थिति, परिवर्तनशील डेटा की अवधारणाओं से बचता है।
कार्यात्मक भाषाएँ कथनों के निष्पादन के बजाय अभिव्यक्तियों और घोषणाओं पर अधिक जोर देती हैं। इसलिए, अन्य प्रक्रियाओं के विपरीत जो स्थानीय या वैश्विक स्थिति पर निर्भर करती हैं, FP में मान आउटपुट केवल फ़ंक्शन को दिए गए तर्कों पर निर्भर करता है।
कार्यात्मक प्रोग्रामिंग की विशेषताएं
- कार्यात्मक प्रोग्रामिंग विधि प्रक्रिया पर नहीं, परिणामों पर ध्यान केंद्रित करती है
- जोर इस बात पर है कि क्या गणना की जानी है
- डेटा अपरिवर्तनीय है
- फ़ंक्शनल प्रोग्रामिंग समस्या को 'फ़ंक्शन' में विघटित करें
- यह गणितीय कार्यों की अवधारणा पर बनाया गया है जो गणना करने के लिए सशर्त अभिव्यक्तियों और पुनरावृत्ति का उपयोग करता है
- यह लूप स्टेटमेंट जैसे पुनरावृत्ति और If-Else जैसे सशर्त स्टेटमेंट का समर्थन नहीं करता है
कार्यात्मक प्रोग्रामिंग का इतिहास
- फंक्शनल प्रोग्रामिंग की नींव लैम्ब्डा कैलकुलस है। इसे 1930 के दशक में फंक्शनल एप्लीकेशन, डेफ़िनेशन और रिकर्सन के लिए विकसित किया गया था
- LISP पहली फंक्शनल प्रोग्रामिंग भाषा थी। मैकार्थी ने इसे 1960 में डिजाइन किया था
- 70 के दशक के अंत में एडिनबर्ग विश्वविद्यालय के शोधकर्ताओं ने एमएल (मेटा लैंग्वेज) को परिभाषित किया
- 80 के दशक की शुरुआत में होप भाषा ने पुनरावृत्ति और समीकरणीय तर्क के लिए बीजीय डेटा प्रकार जोड़े
- वर्ष 2004 में कार्यात्मक भाषा 'स्काला' का आविष्कार।
कार्यात्मक प्रोग्रामिंग भाषाएँ
किसी भी FP भाषा का उद्देश्य गणितीय कार्यों की नकल करना है। हालाँकि, फंक्शनल प्रोग्रामिंग में गणना की मूल प्रक्रिया अलग है।
यहां कुछ सबसे प्रमुख कार्यात्मक प्रोग्रामिंग भाषाएं दी गई हैं:
- हास्केल
- एसएमएल
- Clojure
- स्काला
- Erlang
- स्वच्छ
- F#
- एमएल/ओसीएमएल लिस्प/स्कीम
- XSLT
- एसक्यूएल
- मेथेमेटिका
बुनियादी कार्यात्मक प्रोग्रामिंग शब्दावली और Concepts
अपरिवर्तनीय डेटा
अपरिवर्तनीय डेटा का अर्थ है कि आप पहले से मौजूद डेटा को संशोधित करने के बजाय आसानी से डेटा संरचनाएं बना सकेंगे।
संदर्भात्मक पारदर्शिता
फंक्शनल प्रोग्राम को ठीक वैसे ही काम करना चाहिए जैसे कि यह पहली बार हो रहा हो। इसलिए, आपको पता चल जाएगा कि प्रोग्राम के निष्पादन के दौरान क्या हुआ या क्या नहीं हुआ, और इसके साइड इफ़ेक्ट क्या हैं। FP टर्म में इसे रेफरेंशियल ट्रांसपेरेंसी कहा जाता है।
प्रतिरूपकता
मॉड्यूलर डिज़ाइन उत्पादकता बढ़ाता है। छोटे मॉड्यूल को जल्दी से कोड किया जा सकता है और उनके दोबारा इस्तेमाल की संभावना अधिक होती है, जिससे निश्चित रूप से प्रोग्राम का विकास तेजी से होता है। इसके अलावा, मॉड्यूल का अलग से परीक्षण किया जा सकता है जो आपको यूनिट परीक्षण और डिबगिंग पर खर्च किए गए समय को कम करने में मदद करता है।
रख-रखाव
रखरखाव एक सरल शब्द है जिसका अर्थ है कि एफपी प्रोग्रामिंग को बनाए रखना आसान है क्योंकि आपको दिए गए फ़ंक्शन के बाहर गलती से कुछ भी बदलने के बारे में चिंता करने की आवश्यकता नहीं है।
प्रथम श्रेणी का कार्य
'प्रथम श्रेणी फ़ंक्शन' एक परिभाषा है, जो प्रोग्रामिंग भाषा की उन इकाइयों के लिए है जिनके उपयोग पर कोई प्रतिबंध नहीं है। इसलिए, प्रथम श्रेणी फ़ंक्शन प्रोग्राम में कहीं भी दिखाई दे सकते हैं।
समापन
क्लोजर एक आंतरिक फ़ंक्शन है जो पैरेंट फ़ंक्शन के वेरिएबल्स तक पहुंच सकता है, यहां तक कि पैरेंट फ़ंक्शन के निष्पादित होने के बाद भी।
उच्चतर कार्य
उच्च-क्रम फ़ंक्शन या तो अन्य फ़ंक्शन को तर्क के रूप में लेते हैं या उन्हें परिणाम के रूप में लौटाते हैं।
उच्च-क्रम फ़ंक्शन आंशिक अनुप्रयोगों या करीइंग की अनुमति देते हैं। यह तकनीक एक फ़ंक्शन को उसके तर्कों पर एक-एक करके लागू करती है, क्योंकि प्रत्येक अनुप्रयोग एक नया फ़ंक्शन लौटाता है जो अगले तर्क को स्वीकार करता है।
शुद्ध कार्य
'शुद्ध फ़ंक्शन' एक ऐसा फ़ंक्शन है जिसके इनपुट को इनपुट के रूप में घोषित किया जाता है और उनमें से किसी को भी छिपाया नहीं जाना चाहिए। आउटपुट को भी आउटपुट के रूप में घोषित किया जाता है।
शुद्ध फ़ंक्शन अपने पैरामीटर पर कार्य करते हैं। यदि यह कुछ भी रिटर्न नहीं करता है तो यह कुशल नहीं है। इसके अलावा, यह दिए गए पैरामीटर के लिए समान आउटपुट प्रदान करता है
उदाहरण:
Function Pure(a,b)
{
return a+b;
}
अशुद्ध कार्य
अशुद्ध फ़ंक्शन शुद्ध फ़ंक्शन के बिल्कुल विपरीत होते हैं। इनमें छिपे हुए इनपुट या आउटपुट होते हैं; इसे अशुद्ध कहा जाता है। अशुद्ध फ़ंक्शन का इस्तेमाल या परीक्षण अलग से नहीं किया जा सकता क्योंकि उनमें निर्भरताएँ होती हैं।
उदाहरण
int z;
function notPure(){
z = z+10;
}
समारोह संरचना
फ़ंक्शन संयोजन में दो या अधिक फ़ंक्शनों को मिलाकर एक नया फ़ंक्शन बनाया जाता है।
साझा राज्य
OOP प्रोग्रामिंग में साझा स्थिति एक महत्वपूर्ण अवधारणा है। मूल रूप से, यह ऑब्जेक्ट में गुण जोड़ता है। उदाहरण के लिए, यदि हार्डडिस्क एक ऑब्जेक्ट है, तो स्टोरेज क्षमता और डिस्क आकार को गुण के रूप में जोड़ा जा सकता है।
साइड इफेक्ट्स
साइड इफ़ेक्ट किसी भी स्टेट में होने वाले बदलाव हैं जो किसी कॉल किए गए फ़ंक्शन के बाहर होते हैं। किसी भी FP प्रोग्रामिंग भाषा का सबसे बड़ा लक्ष्य साइड इफ़ेक्ट को बाकी सॉफ़्टवेयर कोड से अलग करके कम से कम करना है। FP प्रोग्रामिंग में आपके प्रोग्रामिंग लॉजिक के बाकी हिस्सों से साइड इफ़ेक्ट को दूर करना महत्वपूर्ण है।
कार्यात्मक प्रोग्रामिंग के लाभ
- आपको कोड में भ्रामक समस्याओं और त्रुटियों से बचने की अनुमति देता है
- यूनिट परीक्षण और डीबग एफपी कोड का परीक्षण और निष्पादन करना आसान है।
- समानांतर प्रसंस्करण और समवर्तीता
- हॉट कोड परिनियोजन और दोष सहिष्णुता
- छोटे कोड के साथ बेहतर मॉड्यूलरिटी प्रदान करता है
- डेवलपर की उत्पादकता में वृद्धि
- नेस्टेड फ़ंक्शन का समर्थन करता है
- कार्यात्मक संरचनाएं जैसे आलसी मानचित्र और सूचियाँ, आदि।
- लैम्ब्डा कैलकुलस के प्रभावी उपयोग की अनुमति देता है
कार्यात्मक प्रोग्रामिंग की सीमाएँ
- फंक्शनल प्रोग्रामिंग प्रतिमान आसान नहीं है, इसलिए शुरुआती के लिए इसे समझना मुश्किल है
- कोडिंग के दौरान कई ऑब्जेक्ट विकसित होने के कारण इसे बनाए रखना कठिन है
- बहुत सारे मॉकिंग और व्यापक पर्यावरणीय सेटअप की आवश्यकता है
- पुनः उपयोग बहुत जटिल है और इसमें लगातार पुनर्रचना की आवश्यकता होती है
- हो सकता है कि ऑब्जेक्ट समस्या को सही ढंग से प्रस्तुत न करें
फंक्शनल प्रोग्रामिंग बनाम ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग
| कार्यात्मक प्रोग्रामिंग | OOP |
|---|---|
| एफपी अपरिवर्तनीय डेटा का उपयोग करता है। | OOP परिवर्तनशील डेटा का उपयोग करता है. |
| घोषणात्मक प्रोग्रामिंग आधारित मॉडल का अनुसरण करता है। | इम्पेरेटिव प्रोग्रामिंग मॉडल का अनुसरण करता है। |
| इसका ध्यान इस बात पर केंद्रित है: “आप कार्यक्रम में क्या कर रहे हैं।” | इसका ध्यान इस बात पर केंद्रित है कि "आप अपनी प्रोग्रामिंग कैसे कर रहे हैं।" |
| समान्तर प्रोग्रामिंग का समर्थन करता है। | समान्तर प्रोग्रामिंग के लिए कोई समर्थन नहीं. |
| इसके कार्यों का कोई दुष्प्रभाव नहीं है। | इस विधि से कई दुष्प्रभाव उत्पन्न हो सकते हैं। |
| प्रवाह नियंत्रण फ़ंक्शन कॉल और रिकर्सन के साथ फ़ंक्शन कॉल का उपयोग करके किया जाता है। | प्रवाह नियंत्रण प्रक्रिया लूप और सशर्त कथनों का उपयोग करके संचालित की जाती है। |
| कथनों का निष्पादन क्रम बहुत महत्वपूर्ण नहीं है। | कथनों का निष्पादन क्रम महत्वपूर्ण है। |
| “डेटा पर अमूर्तता” और “व्यवहार पर अमूर्तता” दोनों का समर्थन करता है। | केवल “डेटा पर अमूर्तता” का समर्थन करता है। |
निष्कर्ष
- फंक्शनल प्रोग्रामिंग या एफपी कुछ मौलिक परिभाषित सिद्धांतों के आधार पर सॉफ्टवेयर निर्माण के बारे में सोचने का एक तरीका है
- कार्यात्मक प्रोग्रामिंग अवधारणाएं प्रक्रिया पर नहीं, बल्कि परिणामों पर ध्यान केंद्रित करती हैं
- किसी भी FP भाषा का उद्देश्य गणितीय कार्यों की नकल करना है
- कुछ सबसे प्रमुख फंक्शनल प्रोग्रामिंग भाषाएं: 1) हास्केल 2) एसएम 3) क्लोजर 4) स्काला 5) एरलांग 6) क्लीन
- 'शुद्ध फ़ंक्शन' एक ऐसा फ़ंक्शन है जिसके इनपुट को इनपुट के रूप में घोषित किया जाता है और उनमें से किसी को भी छिपाया नहीं जाना चाहिए। आउटपुट को भी आउटपुट के रूप में घोषित किया जाता है।
- अपरिवर्तनीय डेटा का मतलब है कि आप पहले से मौजूद डेटा को संशोधित करने के बजाय आसानी से डेटा संरचनाएं बना पाएंगे
- आपको कोड में भ्रामक समस्याओं और त्रुटियों से बचने की अनुमति देता है
- फंक्शनल कोड आसान नहीं है, इसलिए शुरुआती लोगों के लिए इसे समझना मुश्किल है
- FP अपरिवर्तनीय डेटा का उपयोग करता है जबकि OOP परिवर्तनशील डेटा का उपयोग करता है

