Nest.JS | Mônadas -> Talvez

Jan 27 2023
A mônada Maybe, também conhecida como mônada Option, é uma mônada usada para representar cálculos que podem ou não ter um valor. Normalmente é usado para lidar com a possibilidade de valores nulos ou indefinidos de maneira funcional e combinável.

A mônada Maybe, também conhecida como mônada Option, é uma mônada usada para representar cálculos que podem ou não ter um valor. Normalmente é usado para lidar com a possibilidade de valores nulos ou indefinidos de maneira funcional e combinável.

A mônada Maybe é normalmente implementada como um objeto que possui dois subtipos: Juste Nothing. O Justsubtipo contém um valor, enquanto o Nothingsubtipo representa a ausência de um valor.

Aqui está um exemplo da mônada Maybe em 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;
  }
}

Por exemplo, você pode criar um Justque envolva um número e, em seguida, usar o mapmétodo para incrementar esse número, você pode encadear vários deles Juste Nothingjuntos para criar uma computação mais complexa, sem ter que verificar manualmente a presença de um valor em cada etapa.

No Nest.js, o Maybe Monad é um Monad que envolve um valor e fornece um conjunto de métodos para trabalhar com esse valor de maneira funcional, ao mesmo tempo em que lida com a possibilidade de o valor ser nulo ou indefinido.

Aqui está um exemplo de como você pode usar o Maybe Monad no 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;
  }
}

Para extrair o valor agrupado, você pode usar o .getOrElse()método e fornecer um valor padrão para retornar se o valor agrupado fornone

console.log(myService.findUserById(1).getOrElse(new User()))

Você também pode usar a .map()função para transformar o valor agrupado, se ele existir, e .chain()a função para encadear vários cálculos talvez.

É importante observar que este exemplo é básico e não demonstra todo o poder das Mônadas na programação funcional. As mônadas podem ser usadas para lidar com vários casos, como tratamento de erros, encadeamento de vários cálculos e muito mais. É melhor entender o problema e os casos de uso antes de aplicar as mônadas.

Lista de peças: