Nido.JS | Mónadas -> IO
La mónada IO, también conocida como “mónada de entrada/salida”, es un concepto de programación funcional que le permite separar la descripción de una operación de entrada/salida de su ejecución. En otras palabras, le permite definir un cálculo que realiza alguna acción de E/S (como leer de un archivo o interactuar con una base de datos) sin realizar realmente esa acción hasta que se invoque explícitamente.
La mónada IO se usa a menudo para gestionar los efectos secundarios en un lenguaje de programación funcional, como JavaScript. La mónada IO le permite describir un cálculo efectivo de una manera pura y componible, lo que facilita el razonamiento y la prueba de su código.
Una mónada de E/S normalmente se implementa como un objeto que tiene un solo método, llamado run, que realiza la acción de E/S y devuelve el resultado. La mónada de E/S se puede utilizar para encadenar varias operaciones de E/S y crear cálculos más complejos.
Aquí hay un ejemplo de la mónada IO en 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));
}
}
Puede encadenar varios cálculos utilizando los 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()
Es importante tener en cuenta que este ejemplo es básico y no demuestra todo el poder de Monads en la programación funcional. Las mónadas se pueden usar para manejar varios casos, como el manejo de errores, el encadenamiento de múltiples cálculos y más. Es mejor comprender el problema y los casos de uso antes de aplicar las mónadas.
Además, run()se debe llamar al método para ejecutar IO Monad y obtener los resultados, esto se conoce porque impuredepende del estado/contexto externo, IO Monads se utilizan para separar el código impuro del código puro para una mejor organización del código. y pruebas
Lista de piezas:

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































