मोनैड्स और फ़ैक्टर्स कार्यात्मक प्रोग्रामिंग में उन्नत अवधारणाएं हैं जो डेटा परिवर्तनों, साइड इफेक्ट्स और संरचना को संभालने के लिए शक्तिशाली सार प्रदान करते हैं। जबकि वे गणित में श्रेणी सिद्धांत से उत्पन्न हुए हैं, उनके पास जावास्क्रिप्ट जैसी प्रोग्रामिंग भाषाओं में व्यावहारिक अनुप्रयोग हैं।
फ़ंक्टर एक डेटा प्रकार है जो एक मैप विधि को कार्यान्वित करता है, जो फ़ंक्टर के अंदर मान पर एक फ़ंक्शन लागू करता है और रूपांतरित मान के साथ एक नया फ़ंक्टर लौटाता है। संक्षेप में, फ़ैनक्टर आपको कंटेनर की संरचना को बदले बिना किसी फ़ंक्शन को लपेटे गए मान पर लागू करने की अनुमति देते हैं।
class Box { constructor(value) { this.value = value; } map(fn) { return new Box(fn(this.value)); } } // Usage const box = new Box(2); const result = box.map(x => x 3).map(x => x * 2); console.log(result); // Box { value: 10 }
इस उदाहरण में, बॉक्स एक फ़नकार है। मैप विधि फ़ंक्शन fn को बॉक्स के अंदर के मान पर लागू करती है और रूपांतरित मान के साथ एक नया बॉक्स लौटाती है।
एक मोनैड एक प्रकार का फ़ैक्टर है जो दो अतिरिक्त तरीकों को लागू करता है: (या कुछ भाषाओं में रिटर्न) और फ़्लैटमैप (जिसे बाइंड या चेन के रूप में भी जाना जाता है)। मोनाड, मोनाड के संदर्भ को बनाए रखते हुए निहित मूल्य पर श्रृंखला संचालन का एक तरीका प्रदान करते हैं।
class Box { constructor(value) { this.value = value; } static of(value) { return new Box(value); } map(fn) { return Box.of(fn(this.value)); } flatMap(fn) { return fn(this.value); } } // Usage const box = Box.of(2); const result = box .flatMap(x => Box.of(x 3)) .flatMap(x => Box.of(x * 2)); console.log(result); // Box { value: 10 }
इस उदाहरण में, बॉक्स एक फ़ैक्टर और एक मोनड दोनों है। of विधि एक मान को एक बॉक्स में लपेटती है, और फ़्लैटमैप विधि एक फ़ंक्शन को निहित मान पर लागू करती है और परिणामी मोनड लौटाती है।
मोनैड्स और फ़ंक्टर केवल सैद्धांतिक निर्माण नहीं हैं; उनके पास वास्तविक दुनिया की प्रोग्रामिंग में व्यावहारिक अनुप्रयोग हैं। आइए कुछ सामान्य उपयोग के मामलों का पता लगाएं।
शायद मोनैड का उपयोग वैकल्पिक मूल्यों को संभालने, शून्य या अपरिभाषित मूल्यों से बचने और श्रृंखला संचालन के लिए एक सुरक्षित तरीका प्रदान करने के लिए किया जाता है।
class Maybe { constructor(value) { this.value = value; } static of(value) { return new Maybe(value); } isNothing() { return this.value === null || this.value === undefined; } map(fn) { return this.isNothing() ? this : Maybe.of(fn(this.value)); } flatMap(fn) { return this.isNothing() ? this : fn(this.value); } } // Usage const maybeValue = Maybe.of('hello') .map(str => str.toUpperCase()) .flatMap(str => Maybe.of(`${str} WORLD`)); console.log(maybeValue); // Maybe { value: 'HELLO WORLD' }
इस उदाहरण में, हो सकता है कि मोनैड वैकल्पिक मान को सुरक्षित रूप से संभालता है, केवल परिवर्तनों की अनुमति देता है यदि मान शून्य या अपरिभाषित नहीं है।
जावास्क्रिप्ट में वादे ऐसे सन्देश हैं जो अतुल्यकालिक संचालन को संभालते हैं, श्रृंखला संचालन का एक तरीका प्रदान करते हैं और त्रुटियों को संभालते हैं।
const fetchData = url => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(`Data from ${url}`); }, 1000); }); }; // Usage fetchData('https://api.example.com') .then(data => { console.log(data); // 'Data from https://api.example.com' return fetchData('https://api.example.com/2'); }) .then(data => { console.log(data); // 'Data from https://api.example.com/2' }) .catch(error => { console.error(error); });
वादे आपको एसिंक्रोनस ऑपरेशंस को साफ और सुव्यवस्थित तरीके से संभालने, ऑपरेशंस को चेन करने और त्रुटियों को खूबसूरती से संभालने की अनुमति देते हैं।
मोनैड्स और फ़ैक्टर्स कार्यात्मक प्रोग्रामिंग में शक्तिशाली अमूर्तताएं हैं जो आपको डेटा परिवर्तनों, साइड इफेक्ट्स और संरचना के साथ अधिक संरचित और पूर्वानुमानित तरीके से काम करने में सक्षम बनाती हैं।
हालांकि भिक्षुओं और फ़ैक्टरों की गणितीय नींव जटिल हो सकती है, वास्तविक दुनिया की प्रोग्रामिंग में उनके व्यावहारिक अनुप्रयोग अत्यधिक मूल्यवान हैं। चाहे आप मेब मोनैड के साथ वैकल्पिक मानों को संभाल रहे हों या प्रॉमिस के साथ अतुल्यकालिक संचालन को प्रबंधित कर रहे हों, ये कार्यात्मक प्रोग्रामिंग तकनीकें आपको अधिक मजबूत और विश्वसनीय एप्लिकेशन बनाने में मदद कर सकती हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3