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

Effect-TS의 옵션 순서 이해

2024-11-07에 게시됨
검색:165

Understanding Option Sequencing in Effect-TS

예 1: O.andThen을 사용하여 첫 번째 값 무시

개념

O.andThen 함수를 사용하면 두 옵션의 시퀀스를 실행할 수 있으며, 여기서 결과는 두 번째 옵션에 의해서만 결정됩니다. 이는 첫 번째 옵션이 목적을 달성할 때 유용하지만 후속 작업에서는 해당 값이 필요하지 않습니다.

암호

function sequencing_ex01() {
  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.andThen(some2))); // Output: Some(2) (ignores 1 and returns 2)
  console.log(pipe(none, O.andThen(some2))); // Output: None (since the first Option is None)
}

설명

  • pipe(some1, O.andThen(some2)): 여기서 some1은 값 1을 보유하지만 작업은 이를 무시하고 2를 보유하는 some2를 반환합니다.
  • pipe(none, O.andThen(some2)): 첫 번째 Option이 None이므로 작업이 단락되고 None을 반환합니다.

이 시퀀싱 작업은 작업을 연결하고 싶지만 두 번째 작업의 결과에만 관심이 있는 경우에 특히 유용합니다.

예 2: O.flaten을 사용하여 중첩 옵션 평면화

개념

O.Flatten 기능은 한 수준의 중첩을 제거하여 중첩된 옵션을 처리하도록 설계되었습니다. 이는 작업 결과가 옵션 중 하나이고 이를 단일 옵션으로 단순화해야 하는 경우에 유용합니다.

암호

function sequencing_ex02() {
  const nestedSome = O.some(O.some(1)); // Create a nested Option containing the value 1
  const nestedNone = O.some(O.none()); // Create a nested Option representing no value
  const none = O.none(); // Create an Option representing no value

  console.log(pipe(nestedSome, O.flatten)); // Output: Some(1) (flattens the nested Option)
  console.log(pipe(nestedNone, O.flatten)); // Output: None (flattens to None)
  console.log(pipe(none, O.flatten)); // Output: None (since the outer Option is None)
}

설명

  • pipe(nestedSome, O.flaten): 이는 Option 옵션을 단일 옵션으로 평면화하여 Some(1)이 됩니다.
  • pipe(nestedNone, O.flaten): 내부 옵션이 None이므로 병합 결과는 None이 됩니다.
  • pipe(none, O.flaten): 외부 Option이 None이면 병합이 적용되지 않으며 None이 반환됩니다.

중첩된 옵션을 반환할 수 있는 함수를 처리할 때 평면화는 필수적입니다. 이를 통해 결과를 단일 옵션 값으로 간소화할 수 있습니다.

예 3: O.composeK를 사용하여 옵션 반환 함수 구성

개념

O.composeK 함수를 사용하면 옵션을 반환하는 두 개의 함수를 구성하여 첫 번째 함수의 출력이 두 번째 함수에 공급되는 파이프라인을 만들 수 있습니다. 이는 실패하여 None이 될 수 있는 연결 작업에 특히 유용합니다.

암호

function sequencing_ex03() {
  const parseNumber = (s: string): O.Option => {
    const n = parseInt(s, 10);
    return isNaN(n) ? O.none() : O.some(n);
  };

  const doubleIfPositive = (n: number): O.Option =>
    n > 0 ? O.some(n * 2) : O.none();

  const parseAndDouble = pipe(parseNumber, O.composeK(doubleIfPositive));

  console.log(parseAndDouble('42')); // Output: Some(84) (parses and doubles the number)
  console.log(parseAndDouble('-1')); // Output: None (since -1 is not positive)
  console.log(parseAndDouble('abc')); // Output: None (since 'abc' is not a number)
}

설명

  • parseAndDouble('42'): 문자열 '42'가 숫자로 성공적으로 구문 분석되었으며, 양수이므로 두 배가 되어 Some(84)이 됩니다.
  • parseAndDouble('-1'): 문자열 '-1'이 구문 분석되지만 음수이므로 함수는 None을 반환합니다.
  • parseAndDouble('abc'): 문자열 'abc'는 숫자로 구문 분석할 수 없으므로 함수는 None을 반환합니다.

옵션 반환 함수를 구성하면 체인의 모든 단계가 실패할 수 있는 경우를 안전하게 처리하면서 복잡한 작업 체인을 만들 수 있습니다.

결론

이 예제는 일련의 작업을 처리하기 위한 Effect-TS의 Option 유형의 다양성과 강력함을 보여줍니다. O.andThen을 사용하여 값을 무시하거나, O.Flaten을 사용하여 중첩된 옵션을 평면화하거나, O.composeK를 사용하여 작업을 구성하는 경우 이러한 패턴을 사용하면 함수형 프로그래밍 컨텍스트에서 선택적 값을 보다 효과적으로 관리할 수 있습니다. 이러한 기술을 활용하면 보다 강력하고 간결한 코드를 작성할 수 있으며 명확하고 읽기 쉬운 논리를 유지하면서 작업이 값의 부재를 우아하게 처리하도록 보장할 수 있습니다.

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

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

Copyright© 2022 湘ICP备2022001581号-3