Nest.JS | Monaden -> Liste

Jan 27 2023
Die Listenmonade, auch Array-Monade genannt, ist eine Monade, die zur Darstellung von Berechnungen verwendet wird, die mehrere mögliche Ergebnisse haben können. Es handelt sich um eine Monade, die ein Array umschließt und Ihnen die Verwendung monadischer Methoden wie Map, Chain, FlatMap usw. ermöglicht.

Die ListMonade, auch Monade genannt Array, ist eine Monade, die zur Darstellung von Berechnungen verwendet wird, die mehrere mögliche Ergebnisse haben können. Es handelt sich um eine Monade, die ein Array umschließt und es Ihnen ermöglicht, monadische Methoden wie map, chain, flatMapusw. für das Array zu verwenden.

Die ListMonade wird typischerweise als Objekt implementiert, das über eine einzelne Methode verfügt flatMap, die eine Funktion auf jedes Element eines Arrays anwendet und die Ergebnisse verkettet.

Hier ist ein Beispiel für die ListMonade in JavaScript:

class List {
  constructor(values) {
    this.values = values;
  }
  flatMap(f) {
    return new List(this.values.reduce((acc, x) => acc.concat(f(x)), []));
  }
}

const list = new List([1, 2, 3]);
const result = list.flatMap(x => [x * 2, x * 3]);
console.log(result.values); // [2, 3, 4, 6, 6, 9]

Sie könnten beispielsweise eine erstellen List, die ein Array von Zahlen umschließt, und dann die flatMapMethode verwenden, um eine Funktion auf jedes Element des Arrays anzuwenden und die Ergebnisse zu verketten. Sie könnten dann mehrere dieser Berechnungen miteinander verketten, um eine komplexere Berechnung zu erstellen.

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

import { Injectable } from '@nestjs/common';
import { List } from 'fp-ts/lib/List';

@Injectable()
export class MyService {
  public async getUsers(): Promise<List<User>> {
    const users = await this.userRepository.find();
    return List.fromArray(users);
  }

  public async getUserById(id: string): Promise<List<User>> {
    const user = await this.userRepository.findOne(id);
    return List.of(user);
  }
}

Sie können mehrere Berechnungen mit den Methoden .map(), .filter(), verketten .reduce().

myService.getUsers()
  .map(users => users.filter(user => user.age > 18))
  .map(users => users.map(user => user.name))
  .map(users => users.reduce((acc, curr) => acc + ', ' + curr))
  .fold(error => console.log(error), result => console.log(result))

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: