कार्यात्मक प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो गणना को गणितीय कार्यों के मूल्यांकन के रूप में मानता है। यह बदलती स्थिति और परिवर्तनशील डेटा से बचाता है। मूल विचार शुद्ध कार्यों का उपयोग करके प्रोग्राम बनाना, दुष्प्रभावों से बचना और अपरिवर्तनीय डेटा संरचनाओं के साथ काम करना है।
कार्यात्मक प्रोग्रामिंग की मुख्य विशेषताओं में शामिल हैं:
आइए जावास्क्रिप्ट में एफपी को परिभाषित करने वाली कुछ सबसे महत्वपूर्ण अवधारणाओं का पता लगाएं।
एक शुद्ध फ़ंक्शन वह है जो साइड इफेक्ट का कारण नहीं बनता है, जिसका अर्थ है कि यह किसी भी बाहरी स्थिति को संशोधित नहीं करता है। यह पूरी तरह से इसके इनपुट मापदंडों पर निर्भर करता है, और समान इनपुट दिए जाने पर, यह हमेशा समान आउटपुट लौटाएगा।
उदाहरण:
// Pure function example function add(a, b) { return a b; } add(2, 3); // Always returns 5
एक शुद्ध फ़ंक्शन के कई फायदे हैं:
अपरिवर्तनीयता का अर्थ है कि एक बार एक चर या वस्तु बन जाने के बाद, इसे संशोधित नहीं किया जा सकता है। इसके बजाय, यदि आपको कुछ बदलने की आवश्यकता है, तो आप एक नया उदाहरण बनाते हैं।
उदाहरण:
const person = { name: "Alice", age: 25 }; // Attempting to "change" person will return a new object const updatedPerson = { ...person, age: 26 }; console.log(updatedPerson); // { name: 'Alice', age: 26 } console.log(person); // { name: 'Alice', age: 25 }
डेटा को अपरिवर्तनीय रखकर, आप अनपेक्षित दुष्प्रभावों के जोखिम को कम करते हैं, विशेष रूप से जटिल अनुप्रयोगों में।
जावास्क्रिप्ट में, फ़ंक्शन प्रथम श्रेणी के नागरिक हैं। इसका मतलब यह है कि फ़ंक्शंस को वेरिएबल्स को सौंपा जा सकता है, अन्य फ़ंक्शंस के लिए तर्क के रूप में पारित किया जा सकता है, और फ़ंक्शंस से वापस लौटाया जा सकता है। यह गुण कार्यात्मक प्रोग्रामिंग की कुंजी है।
उदाहरण:
const greet = function(name) { return `Hello, ${name}!`; }; console.log(greet("Bob")); // "Hello, Bob!"
उच्च-क्रम फ़ंक्शन वे हैं जो अन्य फ़ंक्शन को तर्क के रूप में लेते हैं या उन्हें वापस कर देते हैं। वे कार्यात्मक प्रोग्रामिंग की आधारशिला हैं और अधिक लचीलेपन और कोड के पुन: उपयोग की अनुमति देते हैं।
उदाहरण:
// Higher-order function function map(arr, fn) { const result = []; for (let i = 0; i x * x); console.log(squared); // [1, 4, 9, 16]
जावास्क्रिप्ट के Array.prototype.map, फ़िल्टर, और कम करना उच्च-क्रम वाले फ़ंक्शंस के अंतर्निहित उदाहरण हैं जो कार्यात्मक प्रोग्रामिंग में मदद करते हैं।
फ़ंक्शन कंपोज़िशन कई फ़ंक्शंस को एक फ़ंक्शन में संयोजित करने की प्रक्रिया है। यह हमें संचालन की एक पाइपलाइन बनाने की अनुमति देता है, जहां एक फ़ंक्शन का आउटपुट अगले फ़ंक्शन का इनपुट बन जाता है।
उदाहरण:
const multiplyByTwo = (x) => x * 2; const addFive = (x) => x 5; const multiplyAndAdd = (x) => addFive(multiplyByTwo(x)); console.log(multiplyAndAdd(5)); // 15
फ़ंक्शन कंपोज़िशन पुन: प्रयोज्य, रखरखाव योग्य कोड के निर्माण के लिए एक शक्तिशाली तकनीक है।
करीइंग एक फ़ंक्शन को परिवर्तित करने की तकनीक है जो कई तर्कों को कार्यों के अनुक्रम में ले जाती है जिनमें से प्रत्येक एक ही तर्क लेता है। यह पुन: प्रयोज्य और आंशिक रूप से लागू फ़ंक्शन बनाने के लिए विशेष रूप से उपयोगी है।
उदाहरण:
function add(a) { return function(b) { return a b; }; } const addFive = add(5); console.log(addFive(3)); // 8
यह तकनीक आपको तर्क को फिर से लिखने की आवश्यकता के बिना विशेष फ़ंक्शन बनाने की अनुमति देती है।
रिकर्सन एक अन्य कार्यात्मक प्रोग्रामिंग तकनीक है जहां एक फ़ंक्शन उसी समस्या के एक छोटे उदाहरण को हल करने के लिए स्वयं को कॉल करता है। इसे अक्सर एफपी में लूप के विकल्प के रूप में उपयोग किया जाता है, क्योंकि लूप में परिवर्तनशील स्थिति शामिल होती है (जिसे कार्यात्मक प्रोग्रामिंग टालने की कोशिश करती है)।
उदाहरण:
function factorial(n) { if (n === 0) return 1; return n * factorial(n - 1); } console.log(factorial(5)); // 120
रिकर्सन आपको उन कार्यों के लिए साफ़, अधिक पठनीय कोड लिखने में सक्षम बनाता है जिन्हें छोटी उप-समस्याओं में विभाजित किया जा सकता है।
साइड इफेक्ट तब होते हैं जब कोई फ़ंक्शन किसी बाहरी स्थिति को संशोधित करता है (जैसे वैश्विक चर को बदलना या DOM के साथ इंटरैक्ट करना)। कार्यात्मक प्रोग्रामिंग में, लक्ष्य साइड इफेक्ट्स को कम करना है, कार्यों को पूर्वानुमानित और आत्मनिर्भर रखना है।
साइड इफेक्ट का उदाहरण:
let count = 0; function increment() { count = 1; // Modifies external state } increment(); console.log(count); // 1
कार्यात्मक प्रोग्रामिंग में, हम मौजूदा स्थिति को संशोधित करने के बजाय नया डेटा लौटाकर इस तरह के व्यवहार से बचते हैं।
एफपी वैकल्पिक:
function increment(value) { return value 1; // Returns a new value instead of modifying external state } let count = 0; count = increment(count); console.log(count); // 1
जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग अपनाने से कई लाभ मिलते हैं:
हालांकि जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग के लिए प्रथम श्रेणी का समर्थन है, पुस्तकालय कार्यात्मक कोड लिखने की आपकी क्षमता को बढ़ा सकते हैं। कुछ लोकप्रिय पुस्तकालयों में शामिल हैं:
उदाहरण:
const _ = require('lodash/fp'); const add = (a, b) => a b; const curriedAdd = _.curry(add); console.log(curriedAdd(1)(2)); // 3
उदाहरण:
const R = require('ramda'); const multiply = R.multiply(2); const add = R.add(3); const multiplyAndAdd = R.pipe(multiply, add); console.log(multiplyAndAdd(5)); // 13
उदाहरण:
const { Map } = require('immutable'); const person = Map({ name: 'Alice', age: 25 }); const updatedPerson = person.set('age', 26); console.log(updatedPerson.toJS()); // { name: 'Alice', age: 26 } console.log(person.toJS()); // { name: 'Alice', age: 25 }
कार्यात्मक प्रोग्रामिंग स्वच्छ, पूर्वानुमेय और रखरखाव योग्य जावास्क्रिप्ट कोड लिखने के लिए एक शक्तिशाली प्रतिमान प्रदान करता है। शुद्ध कार्यों, अपरिवर्तनीयता और दुष्प्रभावों से बचने पर ध्यान केंद्रित करके, डेवलपर्स अधिक विश्वसनीय सॉफ़्टवेयर बना सकते हैं। हालांकि हर समस्या के लिए एक कार्यात्मक दृष्टिकोण की आवश्यकता नहीं होती है, एफपी सिद्धांतों को एकीकृत करने से आपके जावास्क्रिप्ट प्रोजेक्ट्स में उल्लेखनीय वृद्धि हो सकती है, जिससे बेहतर कोड संगठन, परीक्षण योग्यता और मॉड्यूलरिटी हो सकती है।
जैसा कि आप जावास्क्रिप्ट के साथ काम करना जारी रखते हैं, जहां उपयुक्त हो, कार्यात्मक प्रोग्रामिंग तकनीकों को शामिल करने का प्रयास करें। जैसे-जैसे आपका कोडबेस बढ़ेगा और अधिक जटिल होता जाएगा, एफपी के लाभ स्पष्ट हो जाएंगे।
हैप्पी कोडिंग!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3