Gniazdo.JS | Monady -> Albo
Monada Either, znana również jako Resultmonada, jest monadą używaną do reprezentowania obliczeń, które mogą mieć jeden z dwóch możliwych wyników: wartość typu Leftlub wartość typu Right. Typ Leftjest zwykle używany do reprezentowania błędu lub niepowodzenia, podczas gdy Righttyp jest używany do reprezentowania pomyślnego obliczenia.
Monada Eitherjest zwykle implementowana jako obiekt, który ma dwa podtypy: Lefti Right. Podtyp Leftzawiera wartość błędu, podczas gdy Rightpodtyp zawiera pomyślną wartość.
Oto przykład monady Eitherw JavaScript:
class Left {
constructor(value) {
this.value = value;
}
map(f) {
return this;
}
chain(f) {
return this;
}
getOrElse(defaultValue) {
return defaultValue;
}
}
class Right {
constructor(value) {
this.value = value;
}
map(f) {
return new Right(f(this.value));
}
chain(f) {
return f(this.value);
}
getOrElse(defaultValue) {
return this.value;
}
}
Na przykład można utworzyć metodę Rightotaczającą liczbę, a następnie użyć mapmetody w celu zwiększenia tej liczby lub utworzyć metodę Leftotaczającą komunikat o błędzie, a następnie użyć getOrElsemetody do obsługi błędu. Następnie można połączyć wiele z nich Righti Leftrazem, aby utworzyć bardziej złożone obliczenia, bez konieczności ręcznego sprawdzania obecności wartości lub błędu na każdym kroku.
W Nest.js EitherMonada jest Monadą, która pozwala obsługiwać błędy i zwracać wartości w funkcjonalny sposób. Może być używany do reprezentowania wyniku obliczenia, które może być sukcesem (prawidłowa wartość) lub niepowodzeniem (lewa wartość).
Oto przykład, jak możesz użyć EitherMonady w Nest.js:
import { Injectable } from '@nestjs/common';
import { Either, left, right } from 'fp-ts/lib/Either';
@Injectable()
export class MyService {
public findUserById(id: number): Either<Error, User> {
const user = findUserInDB(id);
if (user) {
return right(user);
} else {
return left(new Error('User not found'));
}
}
}
Możesz użyć tej .fold()metody, aby dołączyć funkcję wywołania zwrotnego, która zostanie wywołana z wartością Monady Either.
myService.findUserById(1)
.fold(error => console.log(error), user => console.log(user))
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)



































