Composición de ZIO
flatMap y for
Composición de ZIO es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 2 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 Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
Secuenciación con flatMap
ZIO es una mónada, por lo que flatMap encadena efectos en los que cada paso puede usar el resultado anterior. Los tipos de error y de entorno se combinan automáticamente.
import zio._
val prog =
ZIO.succeed(10).flatMap(n => Console.printLine(s"n = $n"))for-comprehension
La for-comprehension es la forma idiomática de secuenciar efectos ZIO: se lee como código imperativo, pero mantiene la pureza.
import zio._
val prog = for {
_ <- Console.printLine("Enter name:")
name <- Console.readLine
_ <- Console.printLine(s"Hello, $name")
} yield ()Combinación de tipos de error
Al componer dos efectos con tipos de error diferentes, E1 y E2, ZIO infiere el mínimo supertipo común de E1 with E2, que suele ser Throwable o un trait sellado.
zip y zipPar
zip combina secuencialmente dos efectos en una tupla. zipPar los ejecuta de forma concurrente en fibras separadas.
import zio._
val seq: UIO[(Int, Int)] = ZIO.succeed(1).zip(ZIO.succeed(2))
val par: UIO[(Int, Int)] = ZIO.succeed(1).zipPar(ZIO.succeed(2))zipRight y zipLeft
*> (zipRight) conserva el segundo resultado; <* (zipLeft) conserva el primero. Ambos ejecutan los efectos en orden.
import zio._
val r = Console.printLine("log") *> ZIO.succeed(99)foreach
ZIO.foreach ejecuta un efecto para cada elemento de una colección y recopila los resultados, como un traverse.
import zio._
val prog = ZIO.foreach(List(1, 2, 3))(n => Console.printLine(n.toString))foreachPar
ZIO.foreachPar ejecuta de forma concurrente el efecto de cada elemento; es ideal para E/S paralelas, como varias solicitudes HTTP.
import zio._
val ids = List(1, 2, 3)
val prog = ZIO.foreachPar(ids)(id => ZIO.succeed(id * 10))Efectos condicionales
ZIO.when ejecuta un efecto solo si una condición es verdadera y devuelve un Option del resultado. ZIO.unless es su inverso.
import zio._
def logIf(debug: Boolean) =
ZIO.when(debug)(Console.printLine("debugging"))Bucles
ZIO.iterate y ZIO.loop construyen bucles con efectos. repeatN vuelve a ejecutar un efecto un número fijo de veces.
import zio._
val ticks = Console.printLine("tick").repeatN(2) // runs 3 times totalUn flujo de trabajo compuesto
Aquí, un flujo de trabajo calcula una suma y la imprime, compuesto por completo a partir de pequeños pasos ZIO en una for-comprehension.
import zio._
val workflow = for {
a <- ZIO.succeed(20)
b <- ZIO.succeed(22)
_ <- Console.printLine(s"Sum: ${a + b}")
} yield ()Equivalente en Scala convencional
La misma lógica en Scala convencional e inmediata, como comparación. ZIO pospone los efectos y realiza su seguimiento en el sistema de tipos, pero produce una salida idéntica.
object Main {
def main(args: Array[String]): Unit = {
val a = 20
val b = 22
println(s"Sum: ${a + b}")
}
}Comprobación rápida
¿Qué combinador ejecuta un efecto para cada elemento de una lista de forma concurrente?
Resumen
Ha compuesto efectos ZIO con:
flatMap/forpara la secuenciaciónzip/zipPar,*>,<*foreach/foreachParwhen/unlessy bucles
A continuación: los canales de error y dependencias.
Preguntas frecuentes
¿La lección «Composición de ZIO» es gratis?
Sí — el texto completo de «Composición de ZIO» 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 Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
¿Qué aprenderé en «Composición de ZIO»?
flatMap y for Practicas Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?
No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming 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 2 de 4.
¿Cuánto tiempo toma la lección «Composición de ZIO»?
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 Scala for Backend Engineering & Functional Programming?
Sí. Cada lección de Scala for Backend Engineering & Functional Programming 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.