Scala for Backend Engineering & Functional Programming · Lección

Canales de errores y dependencias

Errores tipados y entorno

Lección 3 de 413 pasos

Canales de errores y dependencias es una lección gratuita de Scala for Backend Engineering & Functional Programming 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 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.

Dos canales potentes

Además del valor de éxito, ZIO[R, E, A] realiza un seguimiento de un canal de errores tipados E y de un canal de dependencias R. Ambos son visibles en el tipo, por lo que los fallos y los requisitos quedan explícitos en tiempo de compilación.

Errores tipados

Modele los fallos del dominio como una jerarquía sellada y colóquela en E. De este modo, el compilador le obliga a gestionar exactamente esos casos.

import zio._

sealed trait AppError
case object NotFound extends AppError
case object Forbidden extends AppError

val lookup: IO[AppError, String] = ZIO.fail(NotFound)

Recuperación con catchAll

catchAll gestiona todos los errores de E proporcionando un nuevo efecto. Después de aplicarlo, el canal de errores puede convertirse en Nothing si se han gestionado por completo.

import zio._

val safe: UIO[String] =
  ZIO.fail("boom").catchAll(e => ZIO.succeed(s"recovered: $e"))

catchSome y orElse

catchSome recupera únicamente los errores coincidentes. orElse recurre a otro efecto cuando se produce cualquier fallo.

import zio._

val prog = ZIO.fail("x").orElse(ZIO.succeed("fallback"))

Either y fold

either convierte ZIO[R, E, A] en ZIO[R, Nothing, Either[E, A]]. fold gestiona tanto el error como el éxito y los convierte en un único valor.

import zio._

val label: UIO[String] =
  ZIO.fail(404).fold(e => s"err $e", v => s"ok $v")

Defectos frente a fallos

ZIO distingue entre fallos (tipados, esperados y contenidos en E) y defectos (excepciones inesperadas). ZIO.die genera un defecto; los defectos no forman parte del tipo E y representan errores del programa.

El entorno R

El canal R declara los servicios que necesita un efecto. Acceda a un servicio con ZIO.service; el requisito aparece en R hasta que se proporciona.

import zio._

trait Logger { def log(s: String): UIO[Unit] }

val prog: ZIO[Logger, Nothing, Unit] =
  ZIO.serviceWithZIO[Logger](_.log("hello"))

Definición de un servicio

Un servicio es un trait junto con un ZLayer que lo construye. Las capas describen cómo construir las dependencias y también pueden depender de otras.

import zio._

case class ConsoleLogger() extends Logger {
  def log(s: String): UIO[Unit] = ZIO.succeed(println(s))
}
object ConsoleLogger {
  val layer: ULayer[Logger] = ZLayer.succeed(ConsoleLogger())
}

trait Logger { def log(s: String): UIO[Unit] }

Provisión de dependencias

provide (o provideLayer) satisface el requisito R, convirtiendo ZIO[Logger, E, A] en ZIO[Any, E, A], listo para ejecutarse.

import zio._

val runnable: UIO[Unit] =
  ZIO.serviceWithZIO[Logger](_.log("hi"))
    .provide(ConsoleLogger.layer)

trait Logger { def log(s: String): UIO[Unit] }
object ConsoleLogger { val layer: ULayer[Logger] = ??? }

Composición de capas

Las capas se componen horizontalmente con ++ (combinar) y verticalmente con >>> (usar la salida de una capa como entrada de otra), construyendo un grafo completo de dependencias.

import zio._

// val appLayer = configLayer ++ (dbLayer >>> repoLayer)

Referencia de Scala básico

Como contraste, un programa de Scala autónomo con gestión manual de errores. ZIO codifica el mismo error en el tipo e inyecta las dependencias mediante capas.

object Main {
  def main(args: Array[String]): Unit = {
    val result: Either[String, Int] = Left("NotFound")
    val msg = result.fold(e => s"err $e", v => s"ok $v")
    println(msg)
  }
}

Comprobación rápida

¿Qué hace el método provide con un ZIO[Logger, E, A]?

Repaso

Ha trabajado con ambos canales adicionales:

  • Errores: E tipado, catchAll, orElse, fold, defectos frente a fallos
  • Dependencias: R, servicios, ZLayer, provide, composición de capas

A continuación: ejecución de aplicaciones ZIO.

Gratis para empezar

Aprende Scala con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
39
Lecciones
143

Preguntas frecuentes

¿La lección «Canales de errores y dependencias» es gratis?

Sí — el texto completo de «Canales de errores y dependencias» 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 «Canales de errores y dependencias»?

Errores tipados y entorno 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 3 de 4.

¿Cuánto tiempo toma la lección «Canales de errores y dependencias»?

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