Nest.JS | Monadi -> Forse -> Crea
È un metodo factory che prende il valore interno e lo racchiude nell'istanza Monad appropriata. Il makemetodo viene spesso utilizzato come alternativa al costruttore per creare istanze di monade. Viene comunemente utilizzato per creare monadi in un modo più componibile e può essere utilizzato per aggiungere più logica o comportamento aggiuntivo all'istanza di monade, nonché per impedire al codice client di creare istanze di monadi con valori interni non validi.
Ecco un esempio di un makemetodo che crea una monade Maybe in JavaScript:
class Maybe {
static make(value) {
if (value === null || value === undefined) {
return new Nothing();
} else {
return new Just(value);
}
}
// ...
}
const maybeNumber = Maybe.make(2); // Just(2)
const nothing = Maybe.make(null); // Nothing
In Nest.js, il makemetodo è una funzione di supporto che può essere utilizzata per creare una nuova istanza di Monad. Il makemetodo accetta un valore e restituisce una nuova istanza di Monad.
Ecco un esempio di come potresti utilizzare il makemetodo per creare una nuova istanza di Maybe Monad in Nest.js:
import { Injectable } from '@nestjs/common';
import { Maybe, make } from 'fp-ts/lib/Maybe';
@Injectable()
export class MyService {
public findUserById(id: number): Maybe<User> {
const user = findUserInDB(id);
return make(user);
}
}
make(user)restituirà some(user)se usernon è null o undefined, altrimenti restituirà none.
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)



































