ネスト.JS | モナド -> たぶん

Jan 27 2023
オプション モナドとしても知られるMaybe モナドは、値を持つか持たないかの計算を表すために使用されるモナドです。通常、null または未定義の値の可能性を機能的かつ構成可能な方法で処理するために使用されます。

オプション モナドとしても知られるMaybe モナドは、値を持つか持たないかの計算を表すために使用されるモナドです。通常、null または未定義の値の可能性を機能的かつ構成可能な方法で処理するために使用されます。

Justmight モナドは通常、と の2 つのサブタイプを持つオブジェクトとして実装されますNothing。サブJustタイプは値を保持しますが、Nothingサブタイプは値が存在しないことを表します。

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

class Just {
  constructor(value) {
    this.value = value;
  }
  map(f) {
    return new Just(f(this.value));
  }
  chain(f) {
    return f(this.value);
  }
  getOrElse(defaultValue) {
    return this.value;
  }
}

class Nothing {
  map(f) {
    return this;
  }
  chain(f) {
    return this;
  }
  getOrElse(defaultValue) {
    return defaultValue;
  }
}

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

Nest.js では、Maybe モナドは値をラップし、その値を機能的に操作するための一連のメソッドを提供するモナドであり、値が null または未定義である可能性も処理します。

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

import { Injectable } from '@nestjs/common';
import { Maybe, some, none } from 'fp-ts/lib/Maybe';

@Injectable()
export class MyService {
  public findUserById(id: number): Maybe<User> {
    const user = findUserInDB(id);
    return user ? some(user) : none;
  }
}

ラップされた値を抽出するには、 メソッドを使用し.getOrElse()、ラップされた値が次の場合に返すデフォルト値を指定します。none

console.log(myService.findUserById(1).getOrElse(new User()))

.map()この関数を使用して、ラップされた値が存在する場合はそれを変換したり、.chain()複数のおそらく計算を連鎖させる関数を使用したりすることもできます。

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

パーツのリスト: