paint-brush
कार्यात्मक प्रोग्रामिंग: अनुभवी प्रोग्रामर के लिए एक प्रभावी दृष्टिकोणद्वारा@deewyne
6,037 रीडिंग
6,037 रीडिंग

कार्यात्मक प्रोग्रामिंग: अनुभवी प्रोग्रामर के लिए एक प्रभावी दृष्टिकोण

द्वारा Daniel Yerimah6m2023/01/18
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

कार्यात्मक प्रोग्रामिंग कोड लिखने का एक तरीका है जो समस्याओं को हल करने के लिए कार्यों के उपयोग पर निर्भर करता है। शुद्ध कार्य, जो किसी दिए गए इनपुट के लिए हमेशा एक ही आउटपुट उत्पन्न करते हैं और कोई साइड इफेक्ट नहीं होते हैं, कार्यात्मक प्रोग्रामिंग का एक अनिवार्य तत्व भी हैं। इसके अलावा, कार्यात्मक प्रोग्रामिंग अपरिवर्तनीयता पर जोर देती है, या डेटा बनने के बाद इसे बदलने में असमर्थता पर जोर देती है। इन अवधारणाओं का उपयोग करके, डेवलपर्स कोड लिख सकते हैं जो अधिक अनुमानित, मॉड्यूलर और तर्क के लिए आसान है।
featured image - कार्यात्मक प्रोग्रामिंग: अनुभवी प्रोग्रामर के लिए एक प्रभावी दृष्टिकोण
Daniel Yerimah HackerNoon profile picture

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

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


यह भविष्यवाणी कार्यात्मक कार्यक्रमों को समझने और डिबग करने में आसान बनाती है।


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

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

अनुभवी डेवलपर्स के लिए कार्यात्मक प्रोग्रामिंग के कई लाभ हैं:

  1. बेहतर कोड पठनीयता और रखरखाव
  2. संवर्धित संगामिति और समानता
  3. परीक्षण और डिबगिंग के लिए बेहतर समर्थन
  4. बेहतर कोड प्रदर्शन

बेहतर कोड पठनीयता और रखरखाव

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


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


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


कार्यात्मक प्रोग्रामिंग में उच्च-क्रम के कार्यों का उपयोग शामिल है, जो ऐसे कार्य हैं जो अन्य कार्यों को तर्कों के रूप में स्वीकार करते हैं या उन्हें मूल्यों के रूप में लौटाते हैं। ये कार्य डेवलपर्स को अमूर्त और कोड का पुन: उपयोग करने में सक्षम बनाते हैं, जिससे यह अधिक मॉड्यूलर और बनाए रखने में आसान हो जाता है।


एक उच्च-क्रम फ़ंक्शन का एक विशिष्ट उदाहरण "नक्शा" है, जो मूल्यों की एक सूची लेता है और एक फ़ंक्शन फ़ंक्शन को सूची में प्रत्येक मान पर लागू करता है और रूपांतरित मूल्यों की एक नई सूची देता है। "मानचित्र" का उपयोग करके, एक डेवलपर कोड को दोहराए बिना या लूप का उपयोग किए बिना सूची में प्रत्येक मान के लिए समान परिवर्तन लागू कर सकता है।


मूल्यों की एक सरणी में रूपांतरण लागू करने के लिए जावास्क्रिप्ट में "मानचित्र" उच्च-क्रम फ़ंक्शन का उपयोग करने का एक उदाहरण यहां दिया गया है:


 function multiplyByTwo(x) { return x * 2; } const values = [1, 2, 3, 4, 5]; // Use the "map" function to apply the "multiplyByTwo" function to each value in the "values" array const transformedValues = values.map(multiplyByTwo); // The "transformedValues" array now contains the transformed values console.log(transformedValues); // Output: [2, 4, 6, 8, 10]


इस उदाहरण में, "नक्शा" फ़ंक्शन "multiplyByTwo" नामक फ़ंक्शन और मानों की एक सरणी को तर्क के रूप में लेता है और सरणी में प्रत्येक मान के लिए "multiplyByTwo" फ़ंक्शन लागू करता है, रूपांतरित मानों की एक नई सरणी लौटाता है। यह डेवलपर को लूप लिखने या एक ही कोड को कई बार दोहराए बिना सरणी में प्रत्येक मान के लिए समान परिवर्तन लागू करने की अनुमति देता है।


उच्च-क्रम के कार्यों का उपयोग जटिल तर्क या एल्गोरिदम को एक ही कार्य में समाहित करने के लिए भी किया जा सकता है, जिससे किसी कार्यक्रम के कई हिस्सों में उस तर्क का पुन: उपयोग करना आसान हो जाता है। यह कोड की स्थिरता और प्रतिरूपकता में सुधार कर सकता है, क्योंकि तर्क को एक ही स्थान पर संशोधित या अद्यतन किया जा सकता है।

संवर्धित संगामिति और समानता

समवर्ती और समानांतर प्रोग्रामिंग में, दौड़ की स्थिति तब हो सकती है जब कई थ्रेड्स या प्रक्रियाएं एक ही समय में साझा किए गए डेटा तक पहुंचने और संशोधित करने का प्रयास करती हैं। इससे हो सकता है

अनपेक्षित व्यवहार और डीबग करना मुश्किल हो सकता है।


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


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


समवर्ती प्रोग्रामिंग में दौड़ की स्थिति को खत्म करने के लिए जावास्क्रिप्ट में अपरिवर्तनीय डेटा और शुद्ध कार्यों का उपयोग करने का एक उदाहरण यहां दिया गया है:


 // Define an immutable "counter" object const counter = Object.freeze({ value: 0 }); // Define a pure function to increment the counter function incrementCounter(counter) { // Return a new object with the updated value return { value: counter.value + 1 }; } // Define a function to run concurrently async function runConcurrently() { // Increment the counter 10 times concurrently const promises = []; for (let i = 0; i < 10; i++) { promises.push(new Promise((resolve) => { setTimeout(() => { // Increment the counter using the pure function counter = incrementCounter(counter); resolve(); }, Math.random() * 1000); })); } await Promise.all(promises); // The final value of the counter should be 10 console.log(counter.value); // Output: 10 } runConcurrently();


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


क्योंकि "काउंटर" ऑब्जेक्ट अपरिवर्तनीय है और "इंक्रीमेंट काउंटर" फ़ंक्शन शुद्ध है, कई थ्रेड सुरक्षित रूप से दौड़ की स्थिति या अनपेक्षित साइड इफेक्ट के बिना काउंटर को समवर्ती रूप से बढ़ा सकते हैं। जब समवर्ती कार्य पूरा हो जाता है, तो काउंटर का अंतिम मान 10 होना चाहिए।

कार्यात्मक प्रोग्रामिंग परीक्षण और डिबगिंग के लिए बेहतर समर्थन प्रदान करती है

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


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

बेहतर कोड प्रदर्शन

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


मेमोइज़ेशन एक ऐसी तकनीक है जो महंगे फ़ंक्शन कॉल के परिणामों को कैश में संग्रहीत करती है ताकि फ़ंक्शन को फिर से उसी तर्क के साथ कॉल करने पर पुन: गणना करने की आवश्यकता न हो। यह महंगे कार्यों को कॉल करने की आवश्यकता की संख्या को कम करके प्रोग्राम के प्रदर्शन में सुधार कर सकता है।


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

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

अंत में, आपके वर्कफ़्लो में कार्यात्मक प्रोग्रामिंग अवधारणाओं को शामिल करने पर विचार करना उचित हो सकता है, क्योंकि वे एक क्लीनर, अधिक रखरखाव योग्य और अधिक कुशल कोड के निर्माण की ओर ले जा सकते हैं।