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

Параметры фильтрации в Effect-TS: практическое руководство

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

Filtering Options in Effect-TS: A Practical Guide

Effect-TS предоставляет различные методы для фильтрации значений внутри параметра, позволяя применять преобразования, предикаты или проверки к необязательному значению. Эти функции помогают гарантировать сохранение только соответствующих данных, отбрасывая при этом значения «Нет» или те, которые не соответствуют заданным условиям. В этой статье мы рассмотрим четыре ключевые функции для фильтрации параметров: O.partitionMap, O.filterMap, O.filter и O.exists.

Пример 1. Разделение параметра с помощью O.partitionMap

Концепция

Функция O.partitionMap позволяет разделить параметр Option на кортеж из двух вариантов на основе функции сопоставления, которая возвращает либо. Значения «Ether.left» разделяются на первый «Option», а значения «Ether.right» — на второй «Option». Если исходный параметр имеет значение «Нет», оба раздела имеют значение «Нет».

Код

function filtering_ex01() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const toEither = (n: number) => (n % 2 === 0 ? E.left(n) : E.right(n));

  console.log(pipe(some, O.partitionMap(toEither))); // Output: [None, Some(1)] (1 is odd, so it goes to the right)
  console.log(pipe(none, O.partitionMap(toEither))); // Output: [None, None] (since the Option is None)
}

Объяснение

  • pipe(some, O.partitionMap(toEither)): поскольку 1 нечетно, функция toEither возвращает E.right(1), помещая 1 во второй параметр, в результате чего получается [None, Some(1) ].
  • pipe(none, O.partitionMap(toEither)): поскольку исходный параметр имеет значение None, оба раздела имеют значение None, в результате чего получается [None, None].

Эта функция полезна, когда вам нужно применить сопоставление, которое классифицирует значения, разделяя их на две группы — те, которые удовлетворяют условию, и те, которые не удовлетворяют.

Пример 2. Сопоставление и фильтрация с помощью O.filterMap

Концепция

Функция O.filterMap применяет функцию преобразования к значению внутри Option. Если функция возвращает Some, значение сохраняется; если он возвращает None, значение отфильтровывается. Если исходный параметр имеет значение «Нет», результат остается «Нет».

Код

function filtering_ex02() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const toEven = (n: number) => (n % 2 === 0 ? O.some(n) : O.none());

  console.log(pipe(some, O.filterMap(toEven))); // Output: None (since 1 is not even)
  console.log(pipe(O.some(2), O.filterMap(toEven))); // Output: Some(2) (since 2 is even)
  console.log(pipe(none, O.filterMap(toEven))); // Output: None (since the original Option is None)
}

Объяснение

  • pipe(some, O.filterMap(toEven)): поскольку 1 не является четным, функция toEven возвращает None, а результатом является None.
  • pipe(O.some(2), O.filterMap(toEven)): значение 2 четное, поэтому функция toEven возвращает Some(2), а результатом является Some(2).
  • pipe(none, O.filterMap(toEven)): поскольку исходный параметр имеет значение None, результат остается None.

Эта функция полезна, если вы хотите преобразовать и отфильтровать значение внутри параметра на основе определенных условий.

Пример 3. Фильтрация параметра с помощью предиката с использованием O.filter

Концепция

Функция O.filter проверяет, удовлетворяет ли значение внутри Option заданному предикату. Если предикат удовлетворен, он возвращает исходный Option; в противном случае возвращается None. Если исходный параметр имеет значение «Нет», он остается «Нет».

Код

function filtering_ex03() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const isEven = (n: number) => n % 2 === 0;

  console.log(pipe(some, O.filter(isEven))); // Output: None (since 1 is not even)
  console.log(pipe(O.some(2), O.filter(isEven))); // Output: Some(2) (since 2 is even)
  console.log(pipe(none, O.filter(isEven))); // Output: None (since the original Option is None)
}

Пример 4. Проверка предиката с помощью O.exists

Концепция

Функция O.exists проверяет, удовлетворяет ли значение внутри Option предикату, возвращая true, если это так, и false, если нет. Если параметр равен None, он возвращает false.

Код

function filtering_ex04() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const isEven = (n: number) => n % 2 === 0;

  console.log(pipe(some, O.exists(isEven))); // Output: false (since 1 is not even)
  console.log(pipe(O.some(2), O.exists(isEven))); // Output: true (since 2 is even)
  console.log(pipe(none, O.exists(isEven))); // Output: false (since the original Option is None)
}

Объяснение

  • pipe(some, O.exists(isEven)): поскольку 1 не четное, предикат не выполняется, поэтому результат ложный.
  • pipe(O.some(2), O.exists(isEven)): значение 2 удовлетворяет предикату, поэтому результат истинен.
  • pipe(none, O.exists(isEven)): поскольку параметр имеет значение None, результат будет ложным.

Эта функция полезна, когда вам нужна быстрая проверка, чтобы определить, удовлетворяет ли значение внутри Option условию без преобразования или фильтрации самого Option.

Заключение

Параметры фильтрации в Effect-TS позволяют гибко обрабатывать необязательные значения на основе условий или преобразований. Независимо от того, разделяете ли вы значения с помощью O.partitionMap, применяете преобразования с помощью O.filterMap, проверяете предикаты с помощью O.filter или просто проверяете условия с помощью O.exists, эти инструменты предоставляют надежные методы управления обработкой параметров. Используя эти функции, вы можете эффективно управлять дополнительными данными, обеспечивая сохранение или обработку только соответствующих значений.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/almaclaine/filtering-options-in-effect-ts-a-practical-guide-96l?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3