कार्यात्मक प्रोग्रामिंग क्या है?

जॉन पॉल मुलर द्वारा

बुप्रोपियन एचसीएल एसआर 150 मिलीग्राम

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



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



कार्यात्मक प्रोग्रामिंग

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



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

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

कार्यात्मक प्रोग्रामिंग के लक्ष्यों को समझना

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



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

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

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

कार्यात्मक प्रोग्रामिंग के लिए शुद्ध दृष्टिकोण का उपयोग करना

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

प्रोग्रामिंग के कई तत्वों के साथ, राय दृढ़ता से चलती है कि कोई विशेष प्रोग्रामिंग भाषा शुद्ध स्थिति के लिए योग्य है या नहीं। उदाहरण के लिए, बहुत से लोग जावास्क्रिप्ट को एक शुद्ध भाषा मानेंगे, भले ही वह टाइप न हो। दूसरों को लगता है कि डोमेन-विशिष्ट घोषणात्मक भाषाएं जैसे कि SQL और Lex/Yacc शुद्ध स्थिति के लिए योग्य हैं, भले ही वे सामान्य प्रोग्रामिंग भाषाएं नहीं हैं। केवल कार्यात्मक प्रोग्रामिंग तत्व होने से भाषा शुद्ध दृष्टिकोण का पालन करने के योग्य नहीं होती है।

कार्यात्मक प्रोग्रामिंग के लिए अशुद्ध दृष्टिकोण का उपयोग करना

कई डेवलपर्स कार्यात्मक प्रोग्रामिंग के लाभों को देखने आए हैं। हालाँकि, वे अपनी मौजूदा भाषा के लाभों को भी छोड़ना नहीं चाहते हैं, इसलिए वे ऐसी भाषा का उपयोग करते हैं जो अन्य प्रोग्रामिंग प्रतिमानों में से एक के साथ कार्यात्मक विशेषताओं को मिलाती है। उदाहरण के लिए, आप C++, C#, और Java जैसी भाषाओं में कार्यात्मक प्रोग्रामिंग सुविधाएँ पा सकते हैं। अशुद्ध भाषा के साथ काम करते समय, आपको सावधानी बरतने की ज़रूरत है क्योंकि आपका कोड पूरी तरह कार्यात्मक तरीके से काम नहीं करेगा, और जो सुविधाएं आप सोच सकते हैं वे वास्तव में दूसरे तरीके से काम करेंगी। उदाहरण के लिए, आप कुछ भाषाओं में किसी फ़ंक्शन को किसी अन्य फ़ंक्शन में पास नहीं कर सकते।

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

दिलचस्प लेख