30 puntos por xguru 2024-06-17 | 3 comentarios | Compartir por WhatsApp
  • "The missing Standard Library for TypeScript"
  • Diseñada para facilitar la creación de programas complejos síncronos y asíncronos
  • Hace que el código sea más composable, reusable y testable
  • Maximum Type-Safety (incluyendo manejo de errores)
  • Ofrece una amplia variedad de bibliotecas
  • Proporciona clustering y workflows (versión alfa)
  • Amplia compatibilidad
    • Node, Deno, Bun, Cloudflare Workers, Chrome
    • React, Solid.JS, Vite, Next.JS, Tauri
  • Características principales
    • Concurrencia (Concurrency): permite implementar aplicaciones altamente escalables y de latencia ultrabaja mediante un modelo de concurrencia basado en Fiber
    • Composabilidad (Composability): permite construir software fácil de mantener, legible y flexible usando componentes pequeños y reutilizables
    • Seguridad de recursos (Resource Safety): permite gestionar de forma segura la adquisición y liberación de recursos incluso si el programa falla
    • Seguridad de tipos (Type Safety): pone énfasis en la inferencia y seguridad de tipos, aprovechando al máximo el sistema de tipos de TypeScript
    • Manejo de errores (Error Handling): permite manejar errores de forma estructurada y confiable usando capacidades integradas
    • Asincronía (Asynchronicity): permite escribir código de manera que se vea igual tanto si es síncrono como asíncrono
    • Observabilidad (Observability): permite depurar y monitorear fácilmente la ejecución del programa mediante capacidades completas de tracing

¿Por qué Effect?

  • Programar es difícil
  • Al crear bibliotecas y aplicaciones se usan muchas herramientas para gestionar la complejidad
  • Effect propone una nueva forma de pensar la programación en TypeScript
  • Con las herramientas del ecosistema de Effect se pueden construir mejores aplicaciones y bibliotecas
  • Esto permite entender mejor el lenguaje TypeScript y su sistema de tipos, y hacer que los programas sean más confiables y más fáciles de mantener

El patrón de Effect

  • En el código TypeScript común normalmente se asume que una función tendrá éxito o lanzará una excepción
    • Ejemplo: la función divide lanza una excepción si se divide entre 0
  • Solo viendo el tipo no se puede saber que esta función podría lanzar una excepción
  • Cuando hay cientos o miles de funciones en una base de código, este problema crece
  • Es fácil olvidar el manejo de excepciones y difícil administrarlo
  • El compilador de TypeScript es la primera línea de defensa contra bugs, errores de dominio y complejidad general

Aplicar el patrón de Effect

  • La idea central de Effect es que el sistema de tipos también puede usarse para rastrear no solo los valores exitosos, sino también los errores y el "contexto"
    • Ejemplo: la versión Effect de la función divide no lanza una excepción, sino que entrega el error al llamador
  • Proporciona capacidades para administrar errores y valores exitosos
  • El seguimiento de contexto permite entregar información adicional a una función sin pasar todos los argumentos
    • Ejemplo: durante las pruebas se puede reemplazar la implementación real de un servicio externo por un mock
import { Effect } from "effect"  
   
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>  
  b === 0  
    ? Effect.fail(new Error("Cannot divide by zero"))  
    : Effect.succeed(a / b)  

El ecosistema de Effect

  • La combinación de las ideas únicas de Effect con otras herramientas ha formado un rico ecosistema de bibliotecas que facilita crear aplicaciones complejas
  • Cosas que antes parecían imposibles ahora se vuelven algo normal
  • El ecosistema de Effect está creciendo rápidamente y puede revisarse en el GitHub de Effect

No reinventes la rueda

  • En el código de aplicaciones TypeScript a menudo se resuelven los mismos problemas una y otra vez
  • La interacción con servicios externos, sistemas de archivos y bases de datos es un problema común para cualquier desarrollador de aplicaciones
  • Effect ofrece un rico ecosistema de bibliotecas con soluciones estandarizadas para estos problemas
  • Sin necesidad de instalar múltiples dependencias, Effect resuelve muchos problemas de una sola vez

Resolver problemas prácticos

  • Effect está inspirado en Scala y Haskell
  • Sin embargo, el objetivo de Effect es ofrecer un toolkit práctico para resolver los problemas cotidianos que aparecen al construir aplicaciones y bibliotecas en TypeScript

Aprender disfrutándolo

  • Aprender Effect es divertido
  • Muchos desarrolladores ya usan Effect en su trabajo para resolver problemas reales
  • Se puede empezar usando primero una parte del ecosistema de Effect e ir aprovechando gradualmente más herramientas
  • Al principio los conceptos de Effect pueden resultar poco familiares, pero dedicar tiempo a leer la documentación y entender las ideas clave ayuda después al usar herramientas más avanzadas
  • La comunidad de Effect siempre está lista para ayudar con el aprendizaje y el crecimiento. Consulta Discord o GitHub

3 comentarios

 
firea32 2024-06-24

Parece seguir una línea similar a los principios fundamentales que tiene Rust.

 
toaonly 2024-06-17

Tendría que usarlo un poco más para saberlo bien, pero comparado con fp-ts se siente mucho más cómodo de usar.

 
seunggi 2024-06-17

Se decidió que fp-ts no seguirá desarrollando la versión 3.0 y se integrará a effect.

Si usas fp-ts, vale la pena considerar effect.

https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts