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

जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग का परिचय: मोनैड #12 करें

2024-08-25 को प्रकाशित
ब्राउज़ करें:793

Introduction to Functional Programming in JavaScript: Do monads #12

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

दो मोनाड क्या है?

दो मोनाड एक वाक्यात्मक चीनी है जो अनिवार्य प्रोग्रामिंग जैसी शैली में आपको भिक्षु संचालन के अनुक्रम लिखने की अनुमति देकर भिक्षुओं के साथ काम करना सरल बनाती है। .then या .flatMap के साथ श्रृंखलाबद्ध संचालन के बजाय, Do Monad आपको अधिक सीधा और पठनीय कोड लिखने देता है।

दो मोनाड के लाभ

  1. पठनीयता: यह एक स्वच्छ, रैखिक फैशन में जटिल मोनैडिक संचालन लिखने की अनुमति देता है।
  2. अनिवार्य शैली: अनिवार्य प्रोग्रामिंग से परिचित शैली में मोनैडिक गणनाओं को व्यक्त करने का एक तरीका प्रदान करता है।
  3. त्रुटि प्रबंधन: एक स्पष्ट और सुसंगत संरचना प्रदान करके मोनैडिक संचालन में त्रुटियों से निपटने को सरल बनाता है।

जावास्क्रिप्ट में डू मोनाड को लागू करना

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

उदाहरण: डू मोनाड रनर को लागू करना

आइए एक डू मोनाड धावक को लागू करके शुरुआत करें जो प्रॉमिस मोनाड को संभाल सकता है।

function* doGenerator() {
  const a = yield Promise.resolve(1);
  const b = yield Promise.resolve(2);
  const c = yield Promise.resolve(a   b);
  return c;
}

function runDo(genFunc) {
  const iter = genFunc();

  function handle(result) {
    if (result.done) return Promise.resolve(result.value);
    return Promise.resolve(result.value).then(res => handle(iter.next(res)));
  }

  return handle(iter.next());
}

// Usage
runDo(doGenerator).then(result => console.log(result)); // 3

इस उदाहरण में, doGenerator एक जनरेटर फ़ंक्शन है जो वादे देता है। रनडू फ़ंक्शन जनरेटर को निष्पादित करता है, प्रत्येक दिए गए वादे को संभालता है और हल किए गए मान को जनरेटर में वापस भेजता है।

दो मोनाड के व्यावहारिक अनुप्रयोग

डू मोनैड का उपयोग विभिन्न परिदृश्यों में किया जा सकता है जहां मोनैडिक संचालन को पठनीय और रखरखाव योग्य तरीके से अनुक्रमित करने की आवश्यकता होती है।

उदाहरण: एसिंक्रोनस ऑपरेशंस को संभालना

आइए अधिक जटिल अतुल्यकालिक संचालन को संभालने के लिए पिछले उदाहरण को बढ़ाएं।

function* fetchUserData() {
  const user = yield fetch('https://api.example.com/user/1').then(res => res.json());
  const posts = yield fetch(`https://api.example.com/user/${user.id}/posts`).then(res => res.json());
  const firstPost = posts[0];
  const comments = yield fetch(`https://api.example.com/posts/${firstPost.id}/comments`).then(res => res.json());
  return { user, firstPost, comments };
}

runDo(fetchUserData).then(result => console.log(result));

इस उदाहरण में, FetchUserData एक जनरेटर फ़ंक्शन है जो उपयोगकर्ता डेटा, उनकी पोस्ट और पहली पोस्ट पर टिप्पणियों को लाने का वादा करता है। RunDo फ़ंक्शन इन अतुल्यकालिक परिचालनों को पठनीय और संरचित तरीके से निष्पादित करता है।

उदाहरण: मेब मोनाड के साथ वैकल्पिक मानों को संभालना

हम डो मोनाड पैटर्न का उपयोग मेब जैसे अन्य भिक्षुओं के साथ भी कर सकते हैं।

class Maybe {
  constructor(value) {
    this.value = value;
  }

  static of(value) {
    return new Maybe(value);
  }

  map(fn) {
    return this.value === null || this.value === undefined ? Maybe.of(null) : Maybe.of(fn(this.value));
  }

  flatMap(fn) {
    return this.value === null || this.value === undefined ? Maybe.of(null) : fn(this.value);
  }
}

function* maybeDoGenerator() {
  const a = yield Maybe.of(1);
  const b = yield Maybe.of(2);
  const c = yield Maybe.of(a   b);
  return c;
}

function runMaybeDo(genFunc) {
  const iter = genFunc();

  function handle(result) {
    if (result.done) return Maybe.of(result.value);
    return result.value.flatMap(res => handle(iter.next(res)));
  }

  return handle(iter.next());
}

// Usage
const result = runMaybeDo(maybeDoGenerator);
console.log(result); // Maybe { value: 3 }

इस उदाहरण में, mayDoGenerator एक जेनरेटर फ़ंक्शन है जो हो सकता है मोनैड के साथ काम करता है। runmaybeDo फ़ंक्शन जनरेटर को निष्पादित करता है, प्रत्येक उत्पन्न हो सकता है मान को संभालता है और अलिखित मान को जनरेटर में वापस भेजता है।

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

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

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

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

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

Copyright© 2022 湘ICP备2022001581号-3