0Pricing
Scala for Backend Engineering & Functional Programming · Lezione

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 total

Un 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 / for per il sequenziamento
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless e 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.

Tutte le lezioni di questo corso

  1. L'effetto ZIO
  2. Comporre ZIO
  3. Canali degli errori e delle dipendenze
  4. Eseguire app ZIO
← Torna a Scala for Backend Engineering & Functional Programming