Nest.JS | Monad -> Mungkin
Monad Maybe, juga dikenal sebagai monad Opsi, adalah monad yang digunakan untuk mewakili perhitungan yang mungkin atau mungkin tidak memiliki nilai. Ini biasanya digunakan untuk menangani kemungkinan nilai nol atau tidak terdefinisi dengan cara yang fungsional dan dapat disusun.
Monad Maybe biasanya diimplementasikan sebagai objek yang memiliki dua subtipe: Justdan Nothing. Subtipe Justmemiliki nilai, sedangkan Nothingsubtipe mewakili tidak adanya nilai.
Berikut adalah contoh monad Mungkin di JavaScript:
class Just {
constructor(value) {
this.value = value;
}
map(f) {
return new Just(f(this.value));
}
chain(f) {
return f(this.value);
}
getOrElse(defaultValue) {
return this.value;
}
}
class Nothing {
map(f) {
return this;
}
chain(f) {
return this;
}
getOrElse(defaultValue) {
return defaultValue;
}
}
Misalnya, Anda bisa membuat Justyang membungkus angka dan kemudian menggunakan mapmetode untuk menambah angka itu, Anda kemudian bisa merangkai beberapa dari ini Justdan Nothingbersama-sama untuk membuat perhitungan yang lebih kompleks, tanpa harus memeriksa keberadaan nilai di masing-masing secara manual. melangkah.
Di Nest.js, Maybe Monad adalah Monad yang membungkus nilai dan menyediakan serangkaian metode untuk bekerja dengan nilai tersebut secara fungsional, sekaligus menangani kemungkinan nilai menjadi nol atau tidak terdefinisi.
Berikut adalah contoh bagaimana Anda dapat menggunakan Maybe Monad di Nest.js:
import { Injectable } from '@nestjs/common';
import { Maybe, some, none } from 'fp-ts/lib/Maybe';
@Injectable()
export class MyService {
public findUserById(id: number): Maybe<User> {
const user = findUserInDB(id);
return user ? some(user) : none;
}
}
Untuk mengekstrak nilai yang dibungkus, Anda dapat menggunakan .getOrElse()metode dan memberikan nilai default untuk dikembalikan jika nilai yang dibungkus adalahnone
console.log(myService.findUserById(1).getOrElse(new User()))
Anda juga dapat menggunakan .map()fungsi untuk mengubah nilai yang dibungkus jika ada, dan .chain()fungsi untuk merangkai beberapa kemungkinan perhitungan.
Penting untuk diperhatikan bahwa contoh ini adalah contoh dasar dan tidak mendemonstrasikan kekuatan penuh Monad dalam pemrograman fungsional. Monad dapat digunakan untuk menangani berbagai kasus seperti penanganan kesalahan, rangkaian perhitungan ganda dan banyak lagi, yang terbaik adalah memahami masalah dan menggunakan kasus sebelum menerapkan monad.
Daftar bagian:

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































