"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Opções de filtragem no Effect-TS: um guia prático

Opções de filtragem no Effect-TS: um guia prático

Publicado em 2024-11-06
Navegar:991

Filtering Options in Effect-TS: A Practical Guide

Effect-TS fornece vários métodos para filtrar valores dentro de uma Opção, permitindo que você aplique transformações, predicados ou verificações no valor opcional. Essas funções ajudam a garantir que apenas os dados relevantes sejam retidos enquanto descartam valores None ou aqueles que não atendem às condições especificadas. Neste artigo, exploraremos quatro funções principais para opções de filtragem: O.partitionMap, O.filterMap, O.filter e O.exists.

Exemplo 1: Particionando uma opção com O.partitionMap

Conceito

A função O.partitionMap permite particionar uma Opção em uma tupla de duas Opções com base em uma função de mapeamento que retorna um Ou. Os valores de Both.left são particionados na primeira opção, enquanto os valores de Both.right vão para a segunda opção. Se a opção original for None, ambas as partições serão None.

Código

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)
}

Explicação

  • pipe(some, O.partitionMap(toEither)): Como 1 é ímpar, a função toEither retorna E.right(1), colocando 1 na segunda opção, resultando em [None, Some(1) ].
  • pipe(none, O.partitionMap(toEither)): Como a opção original é None, ambas as partições são None, resultando em [None, None].

Esta função é útil quando você precisa aplicar um mapeamento que categoriza valores, enquanto os separa em dois grupos - aqueles que satisfazem uma condição e aqueles que não o fazem.

Exemplo 2: Mapeamento e Filtragem com O.filterMap

Conceito

A função O.filterMap aplica uma função de transformação ao valor dentro de uma Opção. Se a função retornar Some, o valor será retido; se retornar None, o valor será filtrado. Se a opção original for None, o resultado permanecerá None.

Código

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)
}

Explicação

  • pipe(some, O.filterMap(toEven)): Como 1 não é par, a função toEven retorna None e o resultado é None.
  • pipe(O.some(2), O.filterMap(toEven)): O valor 2 é par, então a função toEven retorna Some(2) e o resultado é Some(2).
  • pipe(none, O.filterMap(toEven)): Como a opção original é None, o resultado permanece None.

Esta função é útil quando você deseja transformar e filtrar o valor dentro de uma Opção com base em condições específicas.

Exemplo 3: Filtrando uma opção com um predicado usando O.filter

Conceito

A função O.filter verifica se o valor dentro de uma Option satisfaz um determinado predicado. Se o predicado for satisfeito, ele retorna a Opção original; caso contrário, retornará Nenhum. Se a opção original for None, ela permanecerá None.

Código

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)
}

Exemplo 4: Verificando um predicado com O.exists

Conceito

A função O.exists verifica se um valor dentro de uma Option satisfaz um predicado, retornando verdadeiro se satisfaz, e falso se não satisfaz. Se a opção for None, ela retornará false.

Código

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)
}

Explicação

  • pipe(some, O.exists(isEven)): Como 1 não é par, o predicado não é satisfeito, então o resultado é falso.
  • pipe(O.some(2), O.exists(isEven)): O valor 2 satisfaz o predicado, então o resultado é verdadeiro.
  • pipe(none, O.exists(isEven)): Como a opção é None, o resultado é falso.

Esta função é útil quando você precisa de uma verificação rápida para determinar se o valor dentro de uma Opção satisfaz uma condição sem transformar ou filtrar a própria Opção.

Conclusão

As opções de filtragem no Effect-TS permitem o tratamento flexível de valores opcionais com base em condições ou transformações. Esteja você particionando valores com O.partitionMap, aplicando transformações com O.filterMap, verificando predicados com O.filter ou simplesmente verificando condições com O.exists, essas ferramentas fornecem métodos robustos para controlar como as opções são tratadas. Ao usar essas funções, você pode gerenciar dados opcionais de forma eficiente, garantindo que apenas os valores relevantes sejam mantidos ou aplicados.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/almaclaine/filtering-options-in-effect-ts-a-practical-guide-96l?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3