ネスト.JS | モナド -> いずれか

Jan 27 2023
Result モナドとも呼ばれるEither モナドは、2 つの可能な結果 (Left 型の値または Right 型の値) のいずれかを取り得る計算を表すために使用されるモナドです。通常、Left タイプはエラーまたは失敗を表すために使用され、Right タイプは計算の成功を表すために使用されます。

モナドEither(モナドとも呼ばれる) は、 2 つの可能な結果 ( type の値または type の値)Resultのいずれかを取り得る計算を表すために使用されるモナドです。通常、型はエラーまたは失敗を表すために使用され、型は計算の成功を表すために使用されます。LeftRightLeftRight

モナドは通常、と のEither2 つのサブタイプを持つオブジェクトとして実装されます。サブタイプはエラー値を保持し、サブタイプは成功値を保持します。LeftRightLeftRight

Either以下は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;
  }
}

たとえば、Right数値をラップする を作成し、mapメソッドを使用してその数値をインクリメントしたり、エラー メッセージをラップする を作成しLeft、そのgetOrElseメソッドを使用してエラーを処理したりできます。これらを複数連鎖させてRight、Left各ステップで値やエラーの存在を手動で確認することなく、より複雑な計算を作成できます。

Nest.js では、Eitherモナドはエラーを処理し、機能的な方法で値を返すことを可能にするモナドです。これは、成功 (右側の値) または失敗 (左側の値) のいずれかの計算結果を表すために使用できます。

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

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

.fold()このメソッドを使用して、モナドの値で呼び出されるコールバック関数をアタッチできますEither。

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

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

パーツのリスト: