Nest.JS | Mônadas -> Ou
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:





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)