0Pricing
Scala for Backend Engineering & Functional Programming · Lección

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 total

Un 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 / for para la secuenciación
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless y 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.

Todas las lecciones de este curso

  1. El efecto ZIO
  2. Composición de ZIO
  3. Canales de errores y dependencias
  4. Ejecución de aplicaciones ZIO
← Volver a Scala for Backend Engineering & Functional Programming