ネスト.JS | モナド -> リスト

Jan 27 2023
List モナドは Array モナドとも呼ばれ、複数の可能な結果が得られる計算を表すために使用されるモナドです。これは配列をラップし、マップ、チェーン、フラットマップなどのモナド メソッドを使用できるようにするモナドです。

Listモナドとも呼ばれるモナドは、Array複数の可能な結果が得られる計算を表すために使用されるモナドです。これは配列をラップし、配列上でmap、chain、などのモナド メソッドを使用できるようにするモナドです。flatMap

モナドは通常、配列の各要素に関数を適用し、結果を連結するList単一のメソッドを持つオブジェクトとして実装されます。flatMap

List以下は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]

たとえば、List数値の配列をラップする を作成し、flatMapメソッドを使用して配列の各要素に関数を適用し、結果を連結することができます。これらの計算を複数連結して、より複雑な計算を作成できます。

ListNest.js でモナドを使用する方法の例を次に示します。

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

.map()、.filter()、メソッドを使用して複数の計算を連鎖させることができます.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))

この例は基本的な例であり、関数型プログラミングにおけるモナドの能力をすべて実証するものではないことに注意することが重要です。モナドは、エラー処理、複数の計算の連鎖など、さまざまなケースを処理するために使用できます。モナドを適用する前に、問題とユースケースを理解することが最善です。

パーツのリスト: