Nest.JS | Monaden -> IO
Die IO-Monade, auch bekannt als „Eingabe-/Ausgabe-Monade“, ist ein Konzept der funktionalen Programmierung, das es Ihnen ermöglicht, die Beschreibung einer Eingabe-/Ausgabeoperation von ihrer Ausführung zu trennen. Mit anderen Worten: Sie können damit eine Berechnung definieren, die eine E/A-Aktion ausführt (z. B. das Lesen aus einer Datei oder die Interaktion mit einer Datenbank), ohne diese Aktion tatsächlich auszuführen, bis sie explizit aufgerufen wird.
Die IO-Monade wird häufig verwendet, um Nebenwirkungen in einer funktionalen Programmiersprache wie JavaScript zu verwalten. Mit der IO-Monade können Sie eine effektive Berechnung auf reine, zusammensetzbare Weise beschreiben, was es einfacher macht, über Ihren Code nachzudenken und ihn zu testen.
Eine E/A-Monade wird normalerweise als Objekt implementiert, das über eine einzelne Methode namens verfügt run, die die E/A-Aktion ausführt und das Ergebnis zurückgibt. Die E/A-Monade kann verwendet werden, um mehrere E/A-Vorgänge miteinander zu verketten und komplexere Berechnungen zu erstellen.
Hier ist ein Beispiel für die IO-Monade in 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));
}
}
Sie können mehrere Berechnungen mit den Methoden .map(), .chain(), verketten .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 ist wichtig zu beachten, dass es sich bei diesem Beispiel um ein einfaches Beispiel handelt und nicht die volle Leistungsfähigkeit von Monaden in der funktionalen Programmierung demonstriert. Monaden können verwendet werden, um verschiedene Fälle wie Fehlerbehandlung, Verkettung mehrerer Berechnungen und mehr zu behandeln. Es ist am besten, das Problem und die Anwendungsfälle zu verstehen, bevor Sie Monaden anwenden.
Außerdem run()muss die Methode aufgerufen werden, um die E/A-Monade auszuführen und die Ergebnisse zu erhalten. Dies wird als impureAbhängigkeit vom externen Zustand/Kontext bezeichnet. E/A-Monaden werden verwendet, um den unreinen Code vom reinen Code für eine bessere Codeorganisation zu trennen und testen.
Teileliste:

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































