¿Qué es Effect-ts y para qué sirve?
\n\nEffect-ts es una potente biblioteca para TypeScript que introduce conceptos de programación funcional en el lenguaje, permitiendo escribir código limpio, componible y type-safe. Resuelve uno de los principales problemas en el desarrollo con TypeScript (y JavaScript en general): la gestión de efectos secundarios (side effects).
\n\nEn la programación imperativa tradicional, los efectos secundarios (trabajo con red, archivos, bases de datos, generación de números aleatorios, manejo del tiempo) están dispersos por todo el código, lo que dificulta las pruebas, la depuración y el análisis. Effect-ts ofrece un enfoque elegante: todos los efectos secundarios se describen como datos (valores) que se pueden combinar, transformar y ejecutar en un entorno controlado.
\n\nPrincipales ventajas de Effect-ts:
\n- \n
- Type-safe: El compilador de TypeScript verifica los tipos de errores y resultados exitosos a nivel de tipos. \n
- Componibilidad: Los efectos se combinan fácilmente mediante funciones como map, flatMap, zip y otras. \n
- Manejo de errores: Los errores se tratan como parte del tipo del efecto, no mediante excepciones. \n
- Capacidad de prueba: Las dependencias (por ejemplo, clientes HTTP, bases de datos) se pueden reemplazar fácilmente. \n
- Concurrencia: Soporte integrado para asincronía, paralelismo y cancelación de operaciones. \n
- Predictibilidad: El código se vuelve más declarativo y más fácil de entender. \n
Effect-ts es especialmente útil en proyectos grandes donde la confiabilidad, la capacidad de prueba y la escalabilidad son importantes. Se utiliza en desarrollo backend (Node.js), frontend (React) e incluso en aplicaciones móviles.
\n\nInstalación
\n\nPara instalar Effect-ts en tu proyecto, usa npm o yarn:
\n\nnpm install effect\n\no
\n\nyarn add effect\n\nAsegúrate también de tener instalado TypeScript versión 4.7 o superior:
\n\nnpm install typescript --save-dev\n\nPara trabajar con Effect-ts, necesitarás configurar tsconfig.json, habilitando el modo estricto (strict: true) y, preferiblemente, target: "ES2020" o superior.
\n\nInicio rápido con ejemplo de código
\n\nEscribamos un programa simple que lea el nombre de usuario desde la línea de comandos y muestre un saludo. Esto mostrará el concepto básico de Effect-ts: descripción del efecto y su ejecución.
\n\nimport { Effect, Console } from "effect"\n\n// Describimos el efecto: solicitar nombre\nconst askName: Effect.Effect<string> = Effect.sync(() => {\n // En una aplicación real, aquí habría entrada de teclado\n return "Alejandro"\n})\n\n// Describimos el efecto: mostrar saludo\nconst greet = (name: string): Effect.Effect<void> =>\n Console.log(`¡Hola, ${name}!`)\n\n// Combinamos los efectos\nconst program: Effect.Effect<void> = askName.pipe(\n Effect.flatMap(greet)\n)\n\n// Ejecutamos el programa\nEffect.runSync(program)\n// Salida: ¡Hola, Alejandro!\n\nEn este ejemplo:
\n- \n
Effect.sync— crea un efecto a partir de una función síncrona. \n Console.log— es un efecto para imprimir en consola. \n pipe— permite aplicar funciones secuencialmente a un valor. \n flatMap— se usa para ejecutar efectos secuencialmente. \n Effect.runSync— ejecuta el efecto de forma síncrona (solo para efectos síncronos). \n
Métodos y funciones principales de Effect-ts
\n\n1. Effect.sync
\nQué hace: Crea un efecto que envuelve una función síncrona. La función se ejecuta de forma perezosa (solo al ejecutar el efecto).
\nParámetros:
\n- \n
f: () => A— función síncrona que devuelve un valor de tipo A. \n
Ejemplo:
\nimport { Effect } from "effect"\n\nc