Nest.JS | Mônadas -> IO
A mônada IO, também conhecida como “mônada de entrada/saída”, é um conceito de programação funcional que permite separar a descrição de uma operação de entrada/saída de sua execução. Em outras palavras, permite definir uma computação que executa alguma ação de E/S (como ler um arquivo ou interagir com um banco de dados) sem realmente executar essa ação até que seja invocada explicitamente.
A mônada IO é frequentemente usada para gerenciar efeitos colaterais em uma linguagem de programação funcional, como JavaScript. A mônada IO permite que você descreva uma computação eficaz de uma maneira pura e combinável, o que torna mais fácil raciocinar e testar seu código.
Uma mônada de E/S é normalmente implementada como um objeto que possui um único método, chamado run, que executa a ação de E/S e retorna o resultado. O monad IO pode ser usado para encadear várias operações de I/O e criar cálculos mais complexos.
Aqui está um exemplo da mônada IO em JavaScript:
class IO {
constructor(effect) {
this.effect = effect
}
run() {
return this.effect()
}
map(f) {
return new IO(() => f(this.run()))
}
chain(f) {
return new IO(() => f(this.run()).run())
}
// ...
}
import { Injectable } from '@nestjs/common';
import { IO, io } from 'fp-ts/lib/IO';
@Injectable()
export class MyService {
public async getUsers(): IO<User[]> {
return io.fromPromise(this.userRepository.find());
}
public async getUserById(id: string): IO<User> {
return io.fromPromise(this.userRepository.findOne(id));
}
}
Você pode encadear vários cálculos usando os métodos .map(), .chain(), .ap().
const program: IO<string> = myService.getUsers()
.map(users => users.filter(user => user.age > 18))
.chain(users => myService.getUserById(users[0].id))
.map(user => user.name)
program.run()
É 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.
Além disso, o run()método deve ser chamado para executar o IO Monad e obter os resultados, isso é conhecido como impuredepende do estado/contexto externo, IO Monads são usados para separar o código impuro do código puro para melhor organização do código e testando.
Lista de peças:





































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