Nest.JS | Monaden -> Entweder

Jan 27 2023
Die Entweder-Monade, auch Ergebnismonade genannt, ist eine Monade, die zur Darstellung von Berechnungen verwendet wird, die eines von zwei möglichen Ergebnissen haben können: einen Wert vom Typ Left oder einen Wert vom Typ Right. Der Typ „Left“ wird normalerweise zur Darstellung eines Fehlers oder Fehlschlags verwendet, während der Typ „Right“ zur Darstellung einer erfolgreichen Berechnung verwendet wird.

Die EitherMonade, auch Monade genannt Result, ist eine Monade, die zur Darstellung von Berechnungen verwendet wird, die eines von zwei möglichen Ergebnissen haben können: einen Wert vom Typ Leftoder einen Wert vom Typ Right. Der LeftTyp wird normalerweise verwendet, um einen Fehler oder Misserfolg darzustellen, während der RightTyp verwendet wird, um eine erfolgreiche Berechnung darzustellen.

Die EitherMonade wird typischerweise als Objekt implementiert, das zwei Untertypen hat: Leftund Right. Der LeftSubtyp enthält einen Fehlerwert, während der RightSubtyp einen Erfolgswert enthält.

Hier ist ein Beispiel für die EitherMonade in 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;
  }
}

Sie könnten beispielsweise eine erstellen, Rightdie eine Zahl umschließt, und dann die mapMethode verwenden, um diese Zahl zu erhöhen, oder Sie könnten eine erstellen, Leftdie eine Fehlermeldung umschließt, und dann die getOrElseMethode verwenden, um den Fehler zu behandeln. Anschließend können Sie mehrere davon verketten Rightund Leftzu einer komplexeren Berechnung zusammenfügen, ohne bei jedem Schritt manuell prüfen zu müssen, ob ein Wert oder ein Fehler vorliegt.

In Nest.js ist die EitherMonade eine Monade, die es Ihnen ermöglicht, Fehler zu behandeln und Werte auf funktionale Weise zurückzugeben. Es kann verwendet werden, um das Ergebnis einer Berechnung darzustellen, das entweder ein Erfolg (ein rechter Wert) oder ein Misserfolg (ein linker Wert) sein kann.

EitherHier ist ein Beispiel dafür, wie Sie die Monade in Nest.js verwenden können :

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'));
    }
  }
}

Sie können die .fold()Methode verwenden, um eine Rückruffunktion anzuhängen, die mit dem Wert der EitherMonade aufgerufen wird.

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

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.

Teileliste: