Composición de efectos
Encadene y combine efectos con pipe y generators.
Composición de efectos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
Componer efectos
Los efectos son valores, así que los programas se construyen componiéndolos. Las herramientas principales son Effect.pipe, Effect.map, Effect.flatMap y la sintaxis Effect.gen basada en generadores.
pipe: encadenar funciones
pipe pasa un efecto por una serie de transformaciones de izquierda a derecha, evitando un anidamiento profundo.
import { Effect, pipe } from "effect";
const program = pipe(
Effect.succeed(2),
Effect.map((n) => n + 1),
Effect.map((n) => n * 10)
);
// Effect<number, never, never> producing 30map: transformar el valor de éxito
Effect.map aplica una función pura al valor de éxito y deja intactos los canales de errores y requisitos.
import { Effect } from "effect";
const doubled = Effect.map(Effect.succeed(21), (n) => n * 2);
// Effect<number, never, never>flatMap: secuenciar efectos
Cuando el siguiente paso también es un efecto, utilice flatMap (también llamado chain). Ejecuta el primer efecto y después pasa su valor a una función que devuelve otro efecto.
import { Effect, pipe } from "effect";
const getId = Effect.succeed(1);
const loadUser = (id: number) => Effect.succeed({ id, name: "Ada" });
const program = pipe(getId, Effect.flatMap(loadUser));
// Effect<{ id: number; name: string }, never, never>map frente a flatMap
Utilice map cuando su función devuelva un valor simple; utilice flatMap cuando devuelva un efecto. Usar map con una función que devuelve un efecto produce un efecto anidado.
Los canales se acumulan
Al secuenciar efectos, sus tipos de error se combinan en una unión y sus requisitos también. El tipo compuesto refleja todo lo que puede fallar y todo lo que se necesita.
// Effect<A, E1, R1> then Effect<B, E2, R2>
// => Effect<B, E1 | E2, R1 | R2>Effect.gen: sintaxis de generadores
Effect.gen permite escribir código de efectos secuencial que se lee como async/await, utilizando yield* para desenvolver cada efecto.
import { Effect } from "effect";
const program = Effect.gen(function* () {
const id = yield* Effect.succeed(1);
const user = yield* Effect.succeed({ id, name: "Ada" });
return user.name;
});
// Effect<string, never, never>gen frente a pipe
gen resulta más claro para flujos lineales de varios pasos con variables intermedias; pipe destaca en cadenas cortas de transformaciones. Ambos se pueden combinar sin restricciones.
Combinar efectos independientes
Effect.all ejecuta varios efectos y recopila sus resultados, acumulando los errores y requisitos de todos ellos.
import { Effect } from "effect";
const both = Effect.all([Effect.succeed(1), Effect.succeed("x")]);
// Effect<[number, string], never, never>Sigue siendo perezoso
Todo esto únicamente describe el programa. No se ejecuta nada hasta que lo ejecuta en el extremo del sistema con Effect.runPromise o Effect.runSync.
import { Effect } from "effect";
// const result = await Effect.runPromise(program);Por qué es importante
La composición es lo que hace prácticos los efectos: usted ensambla piezas pequeñas con tipos para crear programas grandes, mientras el compilador realiza un seguimiento de cada error y dependencia. map, flatMap, pipe y gen son los verbos de uso diario del código de Effect.
Comprobación rápida
Compruebe cuánto entiende sobre la composición de efectos.
Repaso
Usted compone efectos con map (transformar valores exitosos), flatMap (encadenar pasos que devuelven efectos), pipe (pasar un valor por varias transformaciones) y Effect.gen (sintaxis de generadores similar a await). Los canales de errores y requisitos se acumulan como uniones, y nada se ejecuta hasta que se ejecuta en el extremo del programa.
Preguntas frecuentes
¿La lección «Composición de efectos» es gratis?
Sí — el texto completo de «Composición de efectos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Composición de efectos»?
Encadene y combine efectos con pipe y generators. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Composición de efectos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué importan los sistemas de efectos
- El tipo Effect
- Composición de efectos
- Canales de error y dependencias