Gniazdo.JS | Monady -> Może
Monada Maybe, znana również jako monada Option, jest monadą używaną do reprezentowania obliczeń, które mogą mieć wartość lub nie. Jest zwykle używany do obsługi możliwości wystąpienia wartości zerowych lub niezdefiniowanych w sposób funkcjonalny i nadający się do komponowania.
Monada Maybe jest zwykle implementowana jako obiekt, który ma dwa podtypy: Justi Nothing. Podtyp Justzawiera wartość, podczas gdy Nothingpodtyp reprezentuje brak wartości.
Oto przykład monady Maybe w 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;
}
}
Na przykład, możesz utworzyć, Justktóra zawija liczbę, a następnie użyć mapmetody, aby zwiększyć tę liczbę, możesz następnie połączyć wiele z nich Justi Nothingrazem, aby utworzyć bardziej złożone obliczenia, bez konieczności ręcznego sprawdzania obecności wartości w każdym krok.
W Nest.js Maybe Monad to Monada, która opakowuje wartość i zapewnia zestaw metod do pracy z tą wartością w sposób funkcjonalny, jednocześnie obsługując możliwość, że wartość jest pusta lub niezdefiniowana.
Oto przykład, jak możesz użyć Maybe Monad w 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;
}
}
Aby wyodrębnić opakowaną wartość, możesz użyć .getOrElse()metody i podać wartość domyślną do zwrócenia, jeśli opakowana jest wartośćnone
console.log(myService.findUserById(1).getOrElse(new User()))
Możesz także użyć tej .map()funkcji do przekształcenia opakowanej wartości, jeśli istnieje, oraz .chain()funkcji do łączenia wielu obliczeń może.
Należy zauważyć, że ten przykład jest prosty i nie pokazuje pełnej mocy monad w programowaniu funkcjonalnym. Monad można używać do obsługi różnych przypadków, takich jak obsługa błędów, łączenie wielu obliczeń i nie tylko. Najlepiej zrozumieć problem i przypadki użycia przed zastosowaniem monad.
Lista części:

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































