تعد Monads مفهومًا قويًا في البرمجة الوظيفية التي تساعد في إدارة الآثار الجانبية والحفاظ على تعليمات برمجية نظيفة وقابلة للتركيب.
في هذا المنشور، سنستكشف نمط تصميم ربما أحادي باستخدام JavaScript، والذي يُستخدم للتعامل مع العمليات التي قد تفشل أو تُرجع قيمة فارغة/غير محددة.
بعبارات بسيطة، الموناد هو نمط تصميم يسمح لك بتغليف القيم والعمليات المتسلسلة والتعامل مع الآثار الجانبية بطريقة متسقة.
يُعد ربما monad مفيدًا بشكل خاص للتعامل مع القيم الخالية أو غير المحددة دون تناثر التعليمات البرمجية الخاصة بك مع الشيكات الخالية.
سيقوم هذا الموناد بتغليف القيمة وتوفير طرق لتطبيق الوظائف على تلك القيمة إذا كانت موجودة.
// Maybe Monad Implementation 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() ? Maybe.of(null) : Maybe.of(fn(this.value)); } getOrElse(defaultValue) { return this.isNothing() ? defaultValue : this.value; } }
لنفكر في دالة تقوم بالقسمة ولكنها تحتاج إلى إجراء القسمة على صفر.
const safeDivide = (numerator, denominator) => { return denominator === 0 ? Maybe.of(null) : Maybe.of(numerator / denominator); }; const result = Maybe.of(10) .map(x => x * 2) // 20 .map(x => x 1) // 21 .map(x => safeDivide(x, 0)) // Maybe(null) .getOrElse('Division by zero'); console.log(result); // Output: Division by zero
يقوم الموناد ربما بتغليف كل قيمة متوسطة، مع تطبيق التحويلات فقط إذا لم تكن القيمة فارغة أو غير محددة.
تقوم الدالة SafeDivide بإرجاع ربما أحادي، مما يضمن التعامل الآمن مع القسمة على الصفر.
ربما يكون monad أداة قوية لإدارة القيم الخالية أو غير المحددة في JavaScript. من خلال تغليف القيم في وحدة أحادية، يمكنك تسلسل العمليات بأمان والحفاظ على تعليمات برمجية أكثر وضوحًا وقابلية للقراءة. يمكن أن يؤدي هذا النهج المباشر تجاه monads إلى تحسين مجموعة أدوات البرمجة الوظيفية لديك في JavaScript بشكل كبير.
لمزيد من الرؤى التقنية والبرامج التعليمية العملية، تفضل بزيارة rmauro.dev. برمجة سعيدة!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3