Comporre ZIO
flatMap e for
Comporre ZIO è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Sequenziamento con flatMap
ZIO è un monade, quindi flatMap concatena effetti in cui ogni passaggio può usare il risultato del precedente. I tipi dell'errore e dell'ambiente vengono combinati automaticamente.
import zio._
val prog =
ZIO.succeed(10).flatMap(n => Console.printLine(s"n = $n"))for-comprehension
La for-comprehension è il modo idiomatico per sequenziare gli effetti ZIO: il codice si legge come codice imperativo, pur rimanendo puro.
import zio._
val prog = for {
_ <- Console.printLine("Enter name:")
name <- Console.readLine
_ <- Console.printLine(s"Hello, $name")
} yield ()Combinazione dei tipi di errore
Quando si compongono due effetti con tipi di errore diversi, E1 e E2, ZIO deduce il minimo supertipo comune di E1 with E2, spesso Throwable o un sealed trait.
zip e zipPar
zip combina sequenzialmente due effetti in una tupla. zipPar li esegue in concorrenza su fiber separati.
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 e zipLeft
*> (zipRight) conserva il secondo risultato; <* (zipLeft) conserva il primo. Entrambi eseguono gli effetti nell'ordine.
import zio._
val r = Console.printLine("log") *> ZIO.succeed(99)foreach
ZIO.foreach esegue un effetto per ogni elemento di una collezione e raccoglie i risultati, come una traverse.
import zio._
val prog = ZIO.foreach(List(1, 2, 3))(n => Console.printLine(n.toString))foreachPar
ZIO.foreachPar esegue in concorrenza l'effetto associato a ogni elemento: è ideale per l'I/O parallelo, ad esempio per più richieste HTTP.
import zio._
val ids = List(1, 2, 3)
val prog = ZIO.foreachPar(ids)(id => ZIO.succeed(id * 10))Effetti condizionali
ZIO.when esegue un effetto solo se una condizione è vera e restituisce un Option del risultato. ZIO.unless è l'operazione inversa.
import zio._
def logIf(debug: Boolean) =
ZIO.when(debug)(Console.printLine("debugging"))Cicli
ZIO.iterate e ZIO.loop costruiscono cicli con effetti. repeatN esegue nuovamente un effetto per un numero fisso di volte.
import zio._
val ticks = Console.printLine("tick").repeatN(2) // runs 3 times totalUn workflow composto
Qui un workflow calcola una somma e la stampa, componendo interamente piccoli passaggi ZIO in una for-comprehension.
import zio._
val workflow = for {
a <- ZIO.succeed(20)
b <- ZIO.succeed(22)
_ <- Console.printLine(s"Sum: ${a + b}")
} yield ()Equivalente in Scala semplice
La stessa logica in Scala semplice ed eager, per confronto. ZIO rimanda l'esecuzione e traccia gli effetti nel sistema dei tipi, ma produce un output identico.
object Main {
def main(args: Array[String]): Unit = {
val a = 20
val b = 22
println(s"Sum: ${a + b}")
}
}Verifica rapida
Quale combinatore esegue un effetto per ogni elemento di una lista in concorrenza?
Riepilogo
Ha composto gli effetti ZIO con:
flatMap/forper il sequenziamentozip/zipPar,*>,<*foreach/foreachParwhen/unlesse i cicli
Prossimo argomento: i canali dell'errore e delle dipendenze.
Domande Frequenti
La lezione «Comporre ZIO» è gratuita?
Sì — il testo completo di «Comporre ZIO» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Cosa imparerò in «Comporre ZIO»?
flatMap e for Eserciti Scala for Backend Engineering & Functional Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Scala for Backend Engineering & Functional Programming?
Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Comporre ZIO»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Scala for Backend Engineering & Functional Programming?
Sì. Ogni lezione Scala for Backend Engineering & Functional Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.