कार्यात्मक प्रोग्रामिंग में, मोनैड संरचित और पूर्वानुमानित तरीके से गणनाओं को संभालने का एक तरीका प्रदान करते हैं। विभिन्न भिक्षुओं के बीच, दो मोनाड (जिसे "डू नोटेशन" या "मोनैड कॉम्प्रिहेंशन" के रूप में भी जाना जाता है) एक शक्तिशाली निर्माण है जो भिक्षु संचालन को अधिक पठनीय और अनिवार्य-शैली से निपटने की अनुमति देता है।
दो मोनाड एक वाक्यात्मक चीनी है जो अनिवार्य प्रोग्रामिंग जैसी शैली में आपको भिक्षु संचालन के अनुक्रम लिखने की अनुमति देकर भिक्षुओं के साथ काम करना सरल बनाती है। .then या .flatMap के साथ श्रृंखलाबद्ध संचालन के बजाय, Do Monad आपको अधिक सीधा और पठनीय कोड लिखने देता है।
हालांकि जावास्क्रिप्ट में हास्केल की तरह डू मोनाड के लिए अंतर्निहित समर्थन नहीं है, हम जेनरेटर फ़ंक्शंस और एक कस्टम रनर का उपयोग करके एक समान निर्माण कार्यान्वित कर सकते हैं।
आइए एक डू मोनाड धावक को लागू करके शुरुआत करें जो प्रॉमिस मोनाड को संभाल सकता है।
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 फ़ंक्शन जनरेटर को निष्पादित करता है, प्रत्येक उत्पन्न हो सकता है मान को संभालता है और अलिखित मान को जनरेटर में वापस भेजता है।
दो मोनाड एक शक्तिशाली निर्माण है जो आपको अधिक पठनीय और अनिवार्य शैली में भिक्षु संचालन के अनुक्रम लिखने की अनुमति देकर भिक्षुओं के साथ काम करना सरल बनाता है। डू मोनाड रनर को कार्यान्वित करके, आप जटिल अतुल्यकालिक संचालन, वैकल्पिक मान और अन्य मोनैडिक गणनाओं को संरचित और रखरखाव योग्य तरीके से संभाल सकते हैं।
हालांकि जावास्क्रिप्ट मूल रूप से डू मोनाड सिंटैक्स का समर्थन नहीं करता है, जनरेटर फ़ंक्शंस और कस्टम रनर का उपयोग करके, आप समान कार्यक्षमता प्राप्त कर सकते हैं। यह दृष्टिकोण आपके कोड की पठनीयता और रखरखाव को बढ़ाता है, जिससे कार्यात्मक प्रोग्रामिंग शैली में मोनैडिक संचालन के साथ काम करना आसान हो जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3