«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Изучение преобразований опционов в Effect-TS

Изучение преобразований опционов в Effect-TS

Опубликовано 30 июля 2024 г.
Просматривать:861

Exploring Option Conversions in Effect-TS

Effect-TS предоставляет мощные инструменты для обработки типов Option и Any. В этой статье мы рассмотрим различные способы преобразования этих типов и управления ими с помощью служебных функций библиотеки.

Пример 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, в противном случае она возвращает 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 возвращает предоставленное значение по умолчанию, заключенное в Some, если self равно None, в противном случае она возвращает 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 возвращает параметр, содержащий либо вариант, где Left — это резервный вариант, а Right — исходный вариант. Эта функция позволяет объединять варианты в цепочку, где запасной вариант предоставляет «Или» для большего контекста.

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. Найдите первый Some в итерируемом объекте с помощью O.firstSomeOf

Функция O.firstSomeOf возвращает первый Some, найденный в итерации Options. Если все имеют значение 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

Функция 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 в массив. Если параметр «Некоторые», он возвращает массив, содержащий значение; если оно равно 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)
}

Заключение

В этой статье мы рассмотрели различные функции, предоставляемые Effect-TS для преобразования и управления типами Option и Once. Эти функции повышают гибкость и выразительность вашего кода, позволяя более изящно обрабатывать необязательные и подверженные ошибкам значения. Если вам нужно преобразовать «Ибо» в параметр, связать несколько значений параметра или выполнить типобезопасные операции, Effect-TS предлагает надежный набор инструментов для упрощения этих задач. Используя эти утилиты, вы можете писать более чистый и удобный в сопровождении код, который эффективно обрабатывает наличие или отсутствие значений.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/almaclaine/exploring-option-conversions-in-effect-ts-3bpk?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3