कार्यात्मक प्रोग्रामिंग क्या है?
⚡ स्मार्ट सारांश
फंक्शनल प्रोग्रामिंग, सॉफ्टवेयर निर्माण की एक ऐसी विधि है जिसमें शुद्ध फंक्शनों को संयोजित किया जाता है, साझा स्थिति और परिवर्तनीय डेटा से बचा जाता है। यह कथनों की तुलना में अभिव्यक्तियों पर अधिक बल देती है, इसलिए किसी फंक्शन का आउटपुट केवल उसके इनपुट पर निर्भर करता है, जिससे प्रोग्राम पूर्वानुमान योग्य और परीक्षण योग्य बन जाते हैं।
कार्यात्मक प्रोग्रामिंग क्या है?
फंक्शनल प्रोग्रामिंग (जिसे FP भी कहा जाता है) शुद्ध फंक्शन बनाकर सॉफ्टवेयर निर्माण के बारे में सोचने का एक तरीका है। यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में पाए जाने वाले साझा स्टेट और परिवर्तनीय डेटा की अवधारणाओं से बचता है।
फंक्शनल भाषाएँ कथनों के निष्पादन के बजाय अभिव्यक्तियों और घोषणाओं पर ज़ोर देती हैं। इसलिए, अन्य प्रक्रियाओं के विपरीत जो स्थानीय या वैश्विक स्थिति पर निर्भर करती हैं, FP में आउटपुट मान केवल फ़ंक्शन को दिए गए आर्गुमेंट्स पर निर्भर करता है।
कार्यात्मक प्रोग्रामिंग की विशेषताएं
- फंक्शनल प्रोग्रामिंग पद्धति प्रक्रिया पर नहीं, बल्कि परिणामों पर केंद्रित होती है।
- इस बात पर जोर दिया गया है कि किस चीज की गणना की जानी है।
- डेटा अपरिवर्तनीय है।
- फंक्शनल प्रोग्रामिंग समस्या को फंक्शन में विभाजित करती है।
- यह गणितीय कार्यों की अवधारणा पर आधारित है जो गणना करने के लिए सशर्त अभिव्यक्तियों और पुनरावृति का उपयोग करते हैं।
- यह लूप स्टेटमेंट और इफ-एल्स जैसे कंडीशनल स्टेटमेंट जैसे पुनरावृति का समर्थन नहीं करता है।
कार्यात्मक प्रोग्रामिंग का इतिहास
- फंक्शनल प्रोग्रामिंग की नींव लैम्डा कैलकुलस है। इसे 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; }
समारोह संरचना
फ़ंक्शन संयोजन में दो या अधिक फ़ंक्शनों को मिलाकर एक नया फ़ंक्शन बनाया जाता है।
साझा राज्य
साझा अवस्था (Shared state) OOP प्रोग्रामिंग में एक महत्वपूर्ण अवधारणा है। मूल रूप से, यह ऑब्जेक्ट्स में गुणधर्मों को जोड़ना है। उदाहरण के लिए, यदि हार्ड डिस्क एक ऑब्जेक्ट है, तो उसमें भंडारण क्षमता (Storage Capacity) और डिस्क आकार (Disk Size) जैसे गुणधर्म जोड़े जा सकते हैं।
साइड इफेक्ट्स
साइड इफेक्ट्स वे सभी स्टेट परिवर्तन होते हैं जो किसी कॉल किए गए फंक्शन के बाहर होते हैं। किसी भी प्रोग्रामिंग प्रोग्रामिंग भाषा का सबसे बड़ा लक्ष्य साइड इफेक्ट्स को सॉफ्टवेयर कोड के बाकी हिस्सों से अलग करके उन्हें कम करना होता है। प्रोग्रामिंग प्रोग्रामिंग में, साइड इफेक्ट्स को प्रोग्रामिंग लॉजिक के बाकी हिस्सों से अलग रखना बेहद ज़रूरी है।
कार्यात्मक प्रोग्रामिंग के लाभ
- यह आपको कोड में भ्रामक समस्याओं और त्रुटियों से बचने में मदद करता है।
- यूनिट टेस्टिंग और FP डिबगिंग को टेस्ट करना और लागू करना आसान है। Code.
- समानांतर प्रसंस्करण और समवर्तीता।
- हॉट कोड परिनियोजन और दोष सहिष्णुता।
- कम कोड के साथ बेहतर मॉड्यूलरिटी प्रदान करता है।
- डेवलपर की उत्पादकता में वृद्धि।
- नेस्टेड फ़ंक्शंस का समर्थन करता है।
- कार्यात्मक संरचनाएं जैसे आलसी मानचित्र और सूचियाँ, आदि।
- लैम्डा कैलकुलस का प्रभावी उपयोग संभव बनाता है।
कार्यात्मक प्रोग्रामिंग की सीमाएँ
- फंक्शनल प्रोग्रामिंग का प्रतिमान आसान नहीं है, इसलिए शुरुआती लोगों के लिए इसे समझना मुश्किल है।
- कोडिंग के दौरान कई ऑब्जेक्ट्स में बदलाव होने के कारण इसे बनाए रखना मुश्किल है।
- इसमें खूब मजाक उड़ाने और व्यापक पर्यावरणीय सेटअप की जरूरत है।
- पुन: उपयोग बहुत जटिल है और इसके लिए लगातार रिफैक्टरिंग की आवश्यकता होती है।
- ऑब्जेक्ट समस्या को सही ढंग से प्रदर्शित नहीं कर सकते हैं।
फंक्शनल प्रोग्रामिंग बनाम ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग
| कार्यात्मक प्रोग्रामिंग | OOP |
|---|---|
| एफपी अपरिवर्तनीय डेटा का उपयोग करता है। | OOP परिवर्तनशील डेटा का उपयोग करता है. |
| यह डिक्लेरेटिव प्रोग्रामिंग पर आधारित मॉडल का अनुसरण करता है। | यह अनिवार्य प्रोग्रामिंग मॉडल का अनुसरण करता है। |
| इसका मुख्य बिंदु यह है: "आप कार्यक्रम में क्या कर रहे हैं।" | इसका मुख्य बिंदु यह है: "आप अपनी प्रोग्रामिंग कैसे कर रहे हैं।" |
| समान्तर प्रोग्रामिंग का समर्थन करता है। | पैरेलल प्रोग्रामिंग के लिए कोई समर्थन नहीं है। |
| इसके कार्यों का कोई दुष्प्रभाव नहीं है। | किसी विधि से कई दुष्प्रभाव उत्पन्न हो सकते हैं। |
| प्रवाह नियंत्रण फ़ंक्शन कॉल और रिकर्सन के साथ फ़ंक्शन कॉल का उपयोग करके किया जाता है। | प्रवाह नियंत्रण प्रक्रिया लूप और सशर्त कथनों का उपयोग करके संचालित की जाती है। |
| कथनों का निष्पादन क्रम बहुत महत्वपूर्ण नहीं है। | कथनों का निष्पादन क्रम महत्वपूर्ण है। |
| यह "एब्स" दोनों को सपोर्ट करता हैtracडेटा पर नियंत्रण” और “एब्स”tracव्यवहार पर नियंत्रण।" | केवल "एब्स" का समर्थन करता हैtracडेटा पर नियंत्रण। |


