Nest.JS | Monadi -> Entrambi
La Eithermonade, nota anche come Resultmonade, è una monade utilizzata per rappresentare calcoli che possono avere uno dei due possibili risultati: un valore di type Lefto un valore di type Right. Il Lefttipo viene in genere utilizzato per rappresentare un errore o un errore, mentre il Righttipo viene utilizzato per rappresentare un calcolo riuscito.
La Eithermonade è tipicamente implementata come un oggetto che ha due sottotipi: Lefte Right. Il Leftsottotipo contiene un valore di errore, mentre il Rightsottotipo contiene un valore di successo.
Ecco un esempio della Eithermonade in 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;
}
}
Ad esempio, è possibile creare un Rightmessaggio che racchiude un numero e quindi utilizzare il mapmetodo per incrementare tale numero oppure creare un Leftmessaggio di errore che racchiude un messaggio di errore e quindi utilizzare il getOrElsemetodo per gestire l'errore. È quindi possibile concatenare più di questi Righte Leftinsieme per creare un calcolo più complesso, senza dover verificare manualmente la presenza di un valore o di un errore a ogni passaggio.
In Nest.js, EitherMonad è una monade che consente di gestire gli errori e restituire i valori in modo funzionale. Può essere utilizzato per rappresentare il risultato di un calcolo che può essere un successo (un valore corretto) o un fallimento (un valore sinistro).
Ecco un esempio di come potresti utilizzare EitherMonad in 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'));
}
}
}
È possibile utilizzare il .fold()metodo per allegare una funzione di callback che verrà richiamata con il valore di EitherMonad.
myService.findUserById(1)
.fold(error => console.log(error), user => console.log(user))
È importante notare che questo esempio è di base e non dimostra tutta la potenza di Monads nella programmazione funzionale. Le monadi possono essere utilizzate per gestire vari casi come la gestione degli errori, il concatenamento di più calcoli e altro ancora, è meglio comprendere il problema e i casi d'uso prima di applicare le monadi.
Elenco delle parti:

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































