"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Effect-TS에서 옵션 변환 탐색

Effect-TS에서 옵션 변환 탐색

2024-07-30에 게시됨
검색:127

Exploring Option Conversions in Effect-TS

Effect-TS는 옵션 및 둘 중 하나 유형을 처리하기 위한 강력한 도구를 제공합니다. 이 기사에서는 라이브러리의 유틸리티 함수를 사용하여 이러한 유형을 변환하고 조작하는 다양한 방법을 살펴보겠습니다.

예 1: O.getRight를 사용하여 둘 중 하나를 옵션으로 변환

O.getRight 함수는 오류를 삭제하면서 둘 중 하나를 옵션으로 변환합니다. 둘 중 하나가 맞으면 O.some(value)을 반환하고, 그렇지 않으면 O.none을 반환합니다.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex01() {
  const eitherRight = E.right('ok'); // Create an Either containing the value 'ok'
  const eitherLeft = E.left('error'); // Create an Either representing an error

  console.log(O.getRight(eitherRight)); // Output: Some('ok')
  console.log(O.getRight(eitherLeft)); // Output: None
}

예 2: O.getLeft를 사용하여 둘 중 하나를 옵션으로 변환

O.getLeft 함수는 값을 버리고 둘 중 하나를 옵션으로 변환합니다. 둘 중 하나가 왼쪽이면 O.some(error)을 반환하고, 그렇지 않으면 O.none을 반환합니다.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex02() {
  const eitherRight = E.right('ok'); // Create an Either containing the value 'ok'
  const eitherLeft = E.left('error'); // Create an Either representing an error

  console.log(O.getLeft(eitherRight)); // Output: None
  console.log(O.getLeft(eitherLeft)); // Output: Some('error')
}

예 3: O.getOrElse를 사용하여 값 또는 기본값 가져오기

O.getOrElse 함수는 Option 내부 값이 Some인 경우 해당 값을 반환하고, 그렇지 않으면 제공된 기본값을 반환합니다.

import { Option as O, pipe } from 'effect';

function conversions_ex03() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some,
      O.getOrElse(() => 'default')
    )
  ); // Output: 1 (since some contains 1)
  console.log(
    pipe(
      none,
      O.getOrElse(() => 'default')
    )
  ); // Output: 'default' (since none is None)
}

예제 4: O.orElse를 사용한 옵션 연결

O.orElse 함수는 self가 None이면 제공된 Option을 반환하고, 그렇지 않으면 self를 반환합니다. 이 기능을 사용하면 대체 옵션이 다른 옵션인 옵션을 연결할 수 있습니다.

import { Option as O, pipe } from 'effect';

function conversions_ex04() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some1,
      O.orElse(() => some2)
    )
  ); // Output: Some(1) (since some1 contains 1)
  console.log(
    pipe(
      none,
      O.orElse(() => some2)
    )
  ); // Output: Some(2) (since none is None and fallback is some2)
}

예제 5: O.orElseSome을 사용하여 기본값으로 대체

O.orElseSome 함수는 self가 None인 경우 Some에 래핑된 제공된 기본값을 반환하고, 그렇지 않으면 self를 반환합니다. 이 함수를 사용하면 폴백이 Some으로 래핑된 기본값인 옵션 체인을 허용합니다.

import { Option as O, pipe } from 'effect';

function conversions_ex05() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some,
      O.orElseSome(() => 2)
    )
  ); // Output: Some(1) (since some contains 1)
  console.log(
    pipe(
      none,
      O.orElseSome(() => 2)
    )
  ); // Output: Some(2) (since none is None and fallback is 2)
}

예제 6: O.orElseEither를 사용하여 두 컨텍스트 중 하나와 옵션 연결

O.orElseEither 함수는 왼쪽이 대체 옵션이고 오른쪽이 원래 옵션인 둘 중 하나를 포함하는 옵션을 반환합니다. 이 기능을 사용하면 폴백이 더 많은 컨텍스트를 위해 둘 중 하나를 제공하는 옵션 체인을 허용합니다.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex06() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some1,
      O.orElseEither(() => some2)
    )
  ); // Output: Some(Right(1)) (since some1 contains 1)
  console.log(
    pipe(
      none,
      O.orElseEither(() => some2)
    )
  ); // Output: Some(Left(2)) (since none is None and fallback is some2)
}

예제 7: O.firstSomeOf를 사용하여 Iterable에서 첫 번째 Some 찾기

O.firstSomeOf 함수는 옵션의 반복 가능 항목에서 발견된 첫 번째 Some을 반환합니다. 모두 None이면 None을 반환합니다.

import { Option as O } from 'effect';

function conversions_ex07() {
  const options = [O.none(), O.some(1), O.some(2)]; // Create an iterable of Options
  const optionsAllNone = [O.none(), O.none()]; // Create an iterable of None Options

  console.log(O.firstSomeOf(options)); // Output: Some(1) (since the first non-None Option is Some(1))
  console.log(O.firstSomeOf(optionsAllNone)); // Output: None (since all Options are None)
}

예제 8: O.toRefinement를 사용하여 옵션을 반환하는 함수를 Type Guard로 변환

O.toRefinement 함수는 옵션을 반환하는 함수를 유형 가드로 변환하여 보다 구체적인 유형 검사를 허용합니다.

import { Option as O } from 'effect';

function conversions_ex08() {
  const isPositive = (n: number): O.Option => n > 0 ? O.some(n) : O.none();
  const isPositiveRefinement = O.toRefinement(isPositive);

  console.log(isPositiveRefinement(1)); // Output: true (since 1 is positive)
  console.log(isPositiveRefinement(-1)); // Output: false (since -1 is not positive)
}

예제 9: O.toArray를 사용하여 옵션을 배열로 변환

O.toArray 함수는 옵션을 배열로 변환합니다. Option이 Some이면 값이 포함된 배열을 반환합니다. None이면 빈 배열을 반환합니다.

import { Option as O } from 'effect';

function conversions_ex09() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(O.toArray(some)); // Output: [1] (since some contains 1)
  console.log(O.toArray(none)); // Output: [] (since none is None)
}

결론

이 기사에서는 Option 및 Each 유형을 변환하고 조작하기 위해 Effect-TS에서 제공하는 다양한 기능을 살펴보았습니다. 이러한 함수는 코드의 유연성과 표현력을 향상시켜 선택적 값과 오류가 발생하기 쉬운 값을 보다 적절하게 처리할 수 있도록 해줍니다. 둘 중 하나를 옵션으로 변환하거나, 여러 옵션 값을 연결하거나, 유형이 안전한 작업을 수행해야 하는 경우 Effect-TS는 이러한 작업을 단순화할 수 있는 강력한 도구 세트를 제공합니다. 이러한 유틸리티를 활용하면 값의 유무를 효과적으로 처리하는 더 깔끔하고 유지 관리하기 쉬운 코드를 작성할 수 있습니다.

릴리스 선언문 이 글은 https://dev.to/almaclaine/exploring-option-conversions-in- effect-ts-3bpk?1 에서 복제되었습니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3