Nest.JS | Monadi -> Forse
La monade Forse, nota anche come monade Opzione, è una monade utilizzata per rappresentare calcoli che possono o meno avere un valore. Viene tipicamente utilizzato per gestire la possibilità di valori nulli o indefiniti in modo funzionale e componibile.
La monade Maybe è tipicamente implementata come un oggetto che ha due sottotipi: Juste Nothing. Il Justsottotipo contiene un valore, mentre il Nothingsottotipo rappresenta l'assenza di un valore.
Ecco un esempio della monade Forse in 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;
}
}
Ad esempio, potresti creare un Justche avvolge un numero e quindi utilizzare il mapmetodo per incrementare quel numero, potresti quindi concatenare più di questi Juste Nothinginsieme per creare un calcolo più complesso, senza dover verificare manualmente la presenza di un valore in ogni fare un passo.
In Nest.js, Maybe Monad è una monade che avvolge un valore e fornisce un insieme di metodi per lavorare con quel valore in modo funzionale, gestendo anche la possibilità che il valore sia nullo o indefinito.
Ecco un esempio di come potresti utilizzare Maybe Monad in 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;
}
}
Per estrarre il valore racchiuso, puoi utilizzare il .getOrElse()metodo e fornire un valore predefinito da restituire se il valore racchiuso ènone
console.log(myService.findUserById(1).getOrElse(new User()))
Puoi anche utilizzare la .map()funzione per trasformare il valore racchiuso se esiste e .chain()la funzione per concatenare più calcoli forse.
È 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)



































