ネスト.JS | モナド -> アイデンティティ

Jan 27 2023
Identity モナドは、追加の動作や計算を適用せずに値をラップする単純なモナドです。より複雑なモナドの構成要素としてよく使用されます。

Identity モナドは、追加の動作や計算を適用せずに値をラップする単純なモナドです。より複雑なモナドの構成要素としてよく使用されます。

runIdentity モナドは通常、ラップされた値を取得して返す という単一のメソッドを持つオブジェクトとして実装されます。Identity モナドを使用すると、値をラップし、ラップされた値を操作する複数の計算を連鎖させることができます。

以下は JavaScript の Identity モナドの例です。

class Identity {
  constructor(value) {
    this.value = value;
  }
  map(f) {
    return new Identity(f(this.value));
  }
  chain(f) {
    return f(this.value);
  }
  run() {
    return this.value;
  }
}

たとえば、数値をラップする ID を作成し、メソッドを使用してmapその数値をインクリメントすると、これらの ID を複数連結して、各ステップで値を手動でアンラップすることなく、より複雑な計算を作成できます。

Nest.js では、モナドは値をラップし、その値を機能的に操作するための一連のメソッドを提供するオブジェクトです。Identity モナドは、値をラップし、それに対して追加の操作を実行しない単純なモナドです。

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

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

@Injectable()
export class MyService {
  public doSomething(): Identity<string> {
    return new Identity('Hello, World!');
  }
}

ラップされた値を抽出するには、.valueプロパティまたは.extract()メソッドを使用できます。

console.log(myService.doSomething().value)
console.log(myService.doSomething().extract())

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

パーツのリスト: