Nest.JS | Mônadas -> Ou

Jan 27 2023
A mônada qualquer, também conhecida como mônada de resultado, é uma mônada usada para representar cálculos que podem ter um de dois resultados possíveis: um valor do tipo Esquerda ou um valor do tipo Direita. O tipo Left é normalmente usado para representar um erro ou falha, enquanto o tipo Right é usado para representar uma computação bem-sucedida.

A Eithermônada, também conhecida como Resultmônada, é uma mônada usada para representar cálculos que podem ter um de dois resultados possíveis: um valor de tipo Leftou um valor de tipo Right. O Lefttipo é normalmente usado para representar um erro ou falha, enquanto o Righttipo é usado para representar uma computação bem-sucedida.

A Eithermônada normalmente é implementada como um objeto que possui dois subtipos: Lefte Right. O Leftsubtipo contém um valor de erro, enquanto o Rightsubtipo contém um valor de sucesso.

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

Por exemplo, você pode criar um Rightque agrupa um número e, em seguida, usar o mapmétodo para incrementar esse número ou pode criar um Leftque agrupa uma mensagem de erro e, em seguida, usar o getOrElsemétodo para lidar com o erro. Você poderia então encadear vários deles Righte Leftjuntos para criar uma computação mais complexa, sem ter que verificar manualmente a presença de um valor ou um erro em cada etapa.

No Nest.js, o EitherMonad é um Monad que permite tratar erros e retornar valores de forma funcional. Ele pode ser usado para representar o resultado de uma computação que pode ser um sucesso (um valor correto) ou uma falha (um valor esquerdo).

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

Você pode usar o .fold()método para anexar uma função de retorno de chamada que será invocada com o valor do EitherMonad.

myService.findUserById(1)
        .fold(error => console.log(error), user => console.log(user))

É 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: