Nest.JS | 모나드 -> 아마도

Jan 27 2023
옵션 모나드로도 알려진 Maybe 모나드는 값이 있을 수도 있고 없을 수도 있는 계산을 나타내는 데 사용되는 모나드입니다. 일반적으로 기능적이고 구성 가능한 방식으로 null 또는 정의되지 않은 값의 가능성을 처리하는 데 사용됩니다.

옵션 모나드로도 알려진 Maybe 모나드는 값이 있을 수도 있고 없을 수도 있는 계산을 나타내는 데 사용되는 모나드입니다. 일반적으로 기능적이고 구성 가능한 방식으로 null 또는 정의되지 않은 값의 가능성을 처리하는 데 사용됩니다.

JustMaybe 모나드는 일반적으로 와 의 두 하위 유형을 가진 객체로 구현됩니다 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()사용하여 여러 계산을 연결할 수 있습니다.

이 예제는 기본 예제이며 함수형 프로그래밍에서 모나드의 모든 기능을 보여주지 않는다는 점에 유의해야 합니다. 모나드는 오류 처리, 여러 계산 연결 등과 같은 다양한 경우를 처리하는 데 사용할 수 있습니다. 모나드를 적용하기 전에 문제와 사용 사례를 이해하는 것이 가장 좋습니다.

부품 목록: