"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग की खोज

जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग की खोज

2024-11-05 को प्रकाशित
ब्राउज़ करें:588

Exploring Functional Programming in JavaScript

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

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

कार्यात्मक प्रोग्रामिंग की मुख्य विशेषताओं में शामिल हैं:

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

जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग की मुख्य अवधारणाएँ

आइए जावास्क्रिप्ट में एफपी को परिभाषित करने वाली कुछ सबसे महत्वपूर्ण अवधारणाओं का पता लगाएं।

1. शुद्ध कार्य

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

उदाहरण:

// Pure function example
function add(a, b) {
  return a   b;
}

add(2, 3); // Always returns 5

एक शुद्ध फ़ंक्शन के कई फायदे हैं:

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

2. अपरिवर्तनीयता

अपरिवर्तनीयता का अर्थ है कि एक बार एक चर या वस्तु बन जाने के बाद, इसे संशोधित नहीं किया जा सकता है। इसके बजाय, यदि आपको कुछ बदलने की आवश्यकता है, तो आप एक नया उदाहरण बनाते हैं।

उदाहरण:

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 }

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

3. प्रथम श्रेणी के कार्य

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

उदाहरण:

const greet = function(name) {
  return `Hello, ${name}!`;
};

console.log(greet("Bob")); // "Hello, Bob!"

4. उच्च-क्रम के कार्य

उच्च-क्रम फ़ंक्शन वे हैं जो अन्य फ़ंक्शन को तर्क के रूप में लेते हैं या उन्हें वापस कर देते हैं। वे कार्यात्मक प्रोग्रामिंग की आधारशिला हैं और अधिक लचीलेपन और कोड के पुन: उपयोग की अनुमति देते हैं।

उदाहरण:

// 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, फ़िल्टर, और कम करना उच्च-क्रम वाले फ़ंक्शंस के अंतर्निहित उदाहरण हैं जो कार्यात्मक प्रोग्रामिंग में मदद करते हैं।

5. फ़ंक्शन संरचना

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

उदाहरण:

const multiplyByTwo = (x) => x * 2;
const addFive = (x) => x   5;

const multiplyAndAdd = (x) => addFive(multiplyByTwo(x));

console.log(multiplyAndAdd(5)); // 15

फ़ंक्शन कंपोज़िशन पुन: प्रयोज्य, रखरखाव योग्य कोड के निर्माण के लिए एक शक्तिशाली तकनीक है।

6. करींग

करीइंग एक फ़ंक्शन को परिवर्तित करने की तकनीक है जो कई तर्कों को कार्यों के अनुक्रम में ले जाती है जिनमें से प्रत्येक एक ही तर्क लेता है। यह पुन: प्रयोज्य और आंशिक रूप से लागू फ़ंक्शन बनाने के लिए विशेष रूप से उपयोगी है।

उदाहरण:

function add(a) {
  return function(b) {
    return a   b;
  };
}

const addFive = add(5);
console.log(addFive(3)); // 8

यह तकनीक आपको तर्क को फिर से लिखने की आवश्यकता के बिना विशेष फ़ंक्शन बनाने की अनुमति देती है।

7. रिकर्सन

रिकर्सन एक अन्य कार्यात्मक प्रोग्रामिंग तकनीक है जहां एक फ़ंक्शन उसी समस्या के एक छोटे उदाहरण को हल करने के लिए स्वयं को कॉल करता है। इसे अक्सर एफपी में लूप के विकल्प के रूप में उपयोग किया जाता है, क्योंकि लूप में परिवर्तनशील स्थिति शामिल होती है (जिसे कार्यात्मक प्रोग्रामिंग टालने की कोशिश करती है)।

उदाहरण:

function factorial(n) {
  if (n === 0) return 1;
  return n * factorial(n - 1);
}

console.log(factorial(5)); // 120

रिकर्सन आपको उन कार्यों के लिए साफ़, अधिक पठनीय कोड लिखने में सक्षम बनाता है जिन्हें छोटी उप-समस्याओं में विभाजित किया जा सकता है।

8. दुष्प्रभावों से बचना

साइड इफेक्ट तब होते हैं जब कोई फ़ंक्शन किसी बाहरी स्थिति को संशोधित करता है (जैसे वैश्विक चर को बदलना या 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

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

जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग अपनाने से कई लाभ मिलते हैं:

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

जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग लाइब्रेरी

हालांकि जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग के लिए प्रथम श्रेणी का समर्थन है, पुस्तकालय कार्यात्मक कोड लिखने की आपकी क्षमता को बढ़ा सकते हैं। कुछ लोकप्रिय पुस्तकालयों में शामिल हैं:

  1. लोदाश (एफपी मॉड्यूल): लोदाश सामान्य प्रोग्रामिंग कार्यों के लिए उपयोगिता कार्य प्रदान करता है, और इसका एफपी मॉड्यूल आपको अधिक कार्यात्मक शैली में काम करने की अनुमति देता है।

उदाहरण:

   const _ = require('lodash/fp');
   const add = (a, b) => a   b;
   const curriedAdd = _.curry(add);
   console.log(curriedAdd(1)(2)); // 3
  1. रामदा: रामदा एक पुस्तकालय है जिसे विशेष रूप से जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग के लिए डिज़ाइन किया गया है। यह अपरिवर्तनीयता और कार्य संरचना को बढ़ावा देता है।

उदाहरण:

   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
  1. Immutable.js: यह लाइब्रेरी लगातार अपरिवर्तनीय डेटा संरचनाएं प्रदान करती है जो आपको एफपी सिद्धांतों का पालन करने में मदद करती है।

उदाहरण:

   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 }

निष्कर्ष

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

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

हैप्पी कोडिंग!


विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/manjushsh/exploring-functional-programming-in-javascript-3904?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3