जावास्क्रिप्ट - कार्यात्मक प्रोग्रामिंग का विचार।
कार्यात्मक प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो शुद्ध कार्यों का उपयोग करके प्रोग्राम लिखने पर जोर देता है, जिसका कोई साइड इफेक्ट नहीं होता है और हमेशा उसी इनपुट को एक ही आउटपुट देता है। जावास्क्रिप्ट एक बहु-प्रतिमान भाषा है जो अन्य प्रोग्रामिंग प्रतिमानों जैसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग और अनिवार्य प्रोग्रामिंग के साथ-साथ कार्यात्मक प्रोग्रामिंग का समर्थन करती है।
कार्यात्मक प्रोग्रामिंग में शुद्ध कार्य महत्वपूर्ण हैं क्योंकि वे निर्धारक हैं और साइड इफेक्ट्स से मुक्त हैं, जिससे उन्हें तर्क, परीक्षण और डीबग करना आसान हो जाता है। एक साइड इफेक्ट कोई भी देखने योग्य प्रभाव या अंतःक्रिया है जो किसी कार्य या विधि के दायरे के बाहर उसके निष्पादन के परिणामस्वरूप होता है। इसमें फ़ंक्शन के दायरे से बाहर एक चर या ऑब्जेक्ट को संशोधित करना, फ़ाइल में लिखना या कोई I/O ऑपरेशन करना शामिल हो सकता है।
function add(a, b) {
return a + b;
}
ऐसे कार्यों के रूप में जिनका कोई साइड इफेक्ट नहीं है और हर बार एक ही आउटपुट का उत्पादन करते हैं, उन्हें एक ही इनपुट के साथ बुलाया जाता है, हम उन्हें और अधिक लचीला बना सकते हैं और नीचे सूचीबद्ध इन दिलचस्प गुणों / तकनीकों को लागू कर सकते हैं:
- Idempotence : यह विभिन्न प्रकार के परिदृश्यों में उपयोगी हो सकता है, जैसे कि एपीआई कॉल, डेटाबेस अपडेट, या यूजर इंटरफेस अपडेट, जहां आप यह सुनिश्चित करना चाहते हैं कि एक ही ऑपरेशन को कई बार निष्पादित नहीं किया जाता है।
// Applying this function multiple times on the same number will always return the same result.
Math.abs(-5) // Returns 5
Math.abs(Math.abs(-5)) // Also returs 5
// Example of currying
function multiply(a) {
return function(b) {
return a*b;
}
}
const multiplyBy2 = multiply(2);
multiplyBy2(6);
// Returns 6*2 = 12
// Example of Partial Application
function multiply(a,b,c) {
return a*b*c;
}
const multiplyBy2 = multiply.bind(null, 2);
multiplyBy2(3,4)
// Returns 2*3*4 = 24
- मेमोइज़ेशन : यह महंगी फ़ंक्शन कॉल के परिणामों को कैशिंग करके और उसी इनपुट के फिर से आने पर कैश्ड परिणाम को वापस करके फ़ंक्शन के प्रदर्शन को अनुकूलित करने के लिए उपयोग की जाने वाली तकनीक है। जावास्क्रिप्ट में, क्लोजर और ऑब्जेक्ट्स का उपयोग करके संस्मरण को लागू किया जा सकता है।
// Example of Memoization
const memoizedOperation = (() => {
let cache = {};
return (n) => {
if (n in cache) {
console.log("Returning cached value: ");
return cache[n];
} else {
console.log("Performing operation: ");
cache[n] = n*10;
return cache[n];
}
}
})();
console.log(memoizedOperation(4));
console.log(memoizedOperation(4));
console.log(memoizedOperation(5));
/*
Returns:
Performing operation:
40
Returning cached value:
40
Performing operation:
50
*/
compose()फ़ंक्शन संरचना को और pipe()(लॉडश या रामदा जैसे पुस्तकालयों द्वारा प्रदान किया गया) का उपयोग करके प्राप्त किया जा सकता है या हम अपने स्वयं के कार्यों को भी परिभाषित कर सकते हैं।// Example of Composition by creating our own function
const compose = (f,g) => (n) => f(g(n));
const pipe = (f,g) => (n) => g(f(n));
const multiplyBy2 = (n) => n * 2;
const add2 = (n) => n + 2;
const multiplyAndAddComp = compose(multiplyBy2, add2)
const multiplyAndAddPipe = pipe(multiplyBy2, add2)
console.log("Compose: ", multiplyAndAddComp(5));
console.log("Pipe: ", multiplyAndAddPipe(5));
/*Returns:
Compose: 14
Pipe: 12
*/
ये फ़ंक्शन जावास्क्रिप्ट में फ़ंक्शन संरचना के लिए उपयोग किए जाते हैं। फ़ंक्शन composeदो फ़ंक्शन लेता है, fऔर , तर्कों के रूप में और एक नया फ़ंक्शन देता है जो और gकी संरचना है । लौटाया गया कार्य एक तर्क लेता है , पर लागू होता है , और फिर परिणाम पर लागू होता है। फ़ंक्शन समान रूप से काम करता है , लेकिन यह विपरीत क्रम में कार्यों को लागू करता है। यह दो कार्य करता है, और , तर्क के रूप में और एक नया कार्य देता है जो के परिणाम पर लागू होता है । कोड दो सरल कार्यों को भी परिभाषित करता है, और जिनका उपयोग कार्यों की रचना के लिए किया जाता है। कोड तब दो नए कार्य बनाता है, औरfgngnfpipecomposefgfgmultiplyBy2add2multiplyAndAddCompmultiplyAndAddPipe, क्रमशः multiplyBy2और add2कार्यों का उपयोग करके composeऔर कार्यों की रचना करके । pipeअंत में, console.logबयान आवेदन करने के परिणाम multiplyAndAddCompऔर multiplyAndAddPipeसंख्या को प्रिंट करते हैं 5।
multiplyAndAddCompपहले 5 को 2 से गुणा करता है और फिर फ़ंक्शन संरचना का उपयोग करके इसमें 2 जोड़ता है, इसलिए परिणाम 12 है। multiplyAndAddPipeपहले 2 में 5 जोड़ता है और फिर फ़ंक्शन संरचना का उपयोग करके परिणाम को 2 से गुणा करता है, इसलिए परिणाम 14 है।
किसी फ़ंक्शन में जितने कम पैरामीटर होते हैं, उपरोक्त तकनीकों के साथ उस फ़ंक्शन का उपयोग करना उतना ही आसान होता है।
निष्कर्ष
अब, कार्यात्मक प्रोग्रामिंग का विचार डेटा और कार्यों या तर्क को अलग करना है, जो कोड को स्पष्ट और समझने योग्य, विस्तार योग्य, बनाए रखने योग्य और अधिक महत्वपूर्ण रूप से DRY बनाता है।

![क्या एक लिंक्ड सूची है, वैसे भी? [भाग 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































