"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Opciones de filtrado en Effect-TS: una guía práctica

Opciones de filtrado en Effect-TS: una guía práctica

Publicado el 2024-11-06
Navegar:456

Filtering Options in Effect-TS: A Practical Guide

Effect-TS proporciona varios métodos para filtrar valores dentro de una opción, lo que le permite aplicar transformaciones, predicados o comprobaciones en el valor opcional. Estas funciones ayudan a garantizar que solo se conserven los datos relevantes y se descarten los valores Ninguno o aquellos que no cumplan las condiciones especificadas. En este artículo, exploraremos cuatro funciones clave para filtrar opciones: O.partitionMap, O.filterMap, O.filter y O.exists.

Ejemplo 1: particionar una opción con O.partitionMap

Concepto

La función O.partitionMap le permite dividir una opción en una tupla de dos opciones según una función de mapeo que devuelve una cualquiera. Los valores de Which.left se dividen en la primera Opción, mientras que los valores de Which.right van en la segunda Opción. Si la opción original es Ninguna, ambas particiones son Ninguna.

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

Explicación

  • pipe(some, O.partitionMap(toEither)): Dado que 1 es impar, la función toEither devuelve E.right(1), colocando 1 en la segunda opción, lo que da como resultado [Ninguno, Algunos(1) ].
  • pipe(none, O.partitionMap(toEither)): Dado que la opción original es Ninguna, ambas particiones son Ninguna, lo que da como resultado [Ninguna, Ninguna].

Esta función es útil cuando necesitas aplicar un mapeo que categorice valores, mientras los separa en dos grupos: los que satisfacen una condición y los que no.

Ejemplo 2: Mapeo y filtrado con O.filterMap

Concepto

La función O.filterMap aplica una función de transformación al valor dentro de una Opción. Si la función devuelve Some, el valor se conserva; si devuelve Ninguno, el valor se filtra. Si la opción original es Ninguna, el resultado sigue siendo Ninguno.

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

Explicación

  • pipe(some, O.filterMap(toEven)): Dado que 1 no es par, la función toEven devuelve Ninguno y el resultado es Ninguno.
  • pipe(O.some(2), O.filterMap(toEven)): El valor 2 es par, por lo que la función toEven devuelve Some(2), y el resultado es Some(2).
  • pipe(none, O.filterMap(toEven)): Dado que la opción original es Ninguna, el resultado sigue siendo Ninguno.

Esta función es útil cuando desea transformar y filtrar el valor dentro de una opción según condiciones específicas.

Ejemplo 3: Filtrar una opción con un predicado usando O.filter

Concepto

La función O.filter comprueba si el valor dentro de una Opción satisface un predicado determinado. Si se cumple el predicado, devuelve la Opción original; de lo contrario, devuelve Ninguno. Si la opción original es Ninguna, sigue siendo Ninguna.

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

Ejemplo 4: comprobar un predicado con O.exists

Concepto

La función O.exists verifica si un valor dentro de una Opción satisface un predicado, devolviendo verdadero si lo hace y falso si no lo hace. Si la opción es Ninguna, devuelve falso.

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

Explicación

  • pipe(some, O.exists(isEven)): Dado que 1 no es par, el predicado no se satisface, por lo que el resultado es falso.
  • pipe(O.some(2), O.exists(isEven)): El valor 2 satisface el predicado, por lo que el resultado es verdadero.
  • pipe(none, O.exists(isEven)): Dado que la opción es Ninguna, el resultado es falso.

Esta función es útil cuando necesita una verificación rápida para determinar si el valor dentro de una Opción satisface una condición sin transformar o filtrar la Opción en sí.

Conclusión

Las opciones de filtrado en Effect-TS permiten un manejo flexible de valores opcionales basados ​​en condiciones o transformaciones. Ya sea que esté particionando valores con O.partitionMap, aplicando transformaciones con O.filterMap, verificando predicados con O.filter o simplemente verificando condiciones con O.exists, estas herramientas proporcionan métodos sólidos para controlar cómo se manejan las opciones. Al utilizar estas funciones, puede administrar datos opcionales de manera eficiente, asegurando que solo se mantengan o se actúe sobre los valores relevantes.

Declaración de liberación Este artículo se reproduce en: https://dev.to/almaclaine/filtering-options-in-effect-ts-a-practical-guide-96l?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3