Su filosofía esta basada en fibras (que son como hilos de ejecución) altamente escalables y sin bloqueo que nunca desperdician ni pierden recursos, ZIO permite crear aplicaciones escalables, resistentes y reactivas que satisfagan las necesidades de su negocio. Entre las características podemos nombrar:
- Alto rendimiento.
- Tipe-safe.
- Concurrente.
- Asincrónico.
- Seguridad en los recursos.
- Probable
- Elástico.
- Funcional.
Antes de empezar debemos incluir a ZIO en el proyecto agregando la siguiente entrade en el build.sbt:
libraryDependencies += "dev.zio" %% "zio" % "1.0.0-RC17"
Si deseamos utilizar streams ZIO, también debe incluir la siguiente dependencia:
libraryDependencies += "dev.zio" %% "zio-streams" % "1.0.0-RC17"
Ahora veamos un pequeño ejemplo:
import zio.App
import zio.console._
object MyApp extends App {
def run(args: List[String]) =
myAppLogic.fold(_ => 1, _ => 0)
val myAppLogic =
for {
_ <- putStrLn("Hello! What is your name?")
name <- getStrLn
_ <- putStrLn(s"Hello, ${name}, welcome to ZIO!")
} yield ()
}
run debería devolver un valor ZIO que tenga todos sus errores manejados,
Como se puede ver myAppLogic, se plegó de tal forma que produce un valor si falla, habrá un 1; pero si tiene éxito, habrá un 0.
Si está integrando ZIO en una aplicación existente, utilizando inyección de dependencia, o no controla su función principal main, se puede crear un sistema de tiempo de ejecución para ejecutar sus programas ZIO:
import zio._
import zio.console._
object IntegrationExample {
val runtime = new DefaultRuntime {}
runtime.unsafeRun(putStrLn("Hello World!"))
}
ZIO proporciona un módulo para interactuar con la consola. Puede importar las funciones en este módulo con el siguiente fragmento de código:
import zio.console._
Si necesita imprimir texto en la consola, puede usar putStr y putStrLn:
// Print without trailing line break
putStr("Hello World")
// res8: ZIO[Console, Nothing, Unit] = zio.ZIO$Read@2ba3e0d1
// Print string and include trailing line break
putStrLn("Hello World")
// res9: ZIO[Console, Nothing, Unit] = zio.ZIO$Read@75e3acfe
Si necesita leer la entrada desde la consola, puede usar getStrLn:
val echo = getStrLn flatMap putStrLn
// echo: ZIO[Console, java.io.IOException, Unit] = zio.ZIO$FlatMap@72bc78be
Es importante utilizar la consola de zio porque cada fibra tiene sus propios recursos, y la consola de Zio soluciona la interacción con la consola.
Dejo link : https://zio.dev/