Compondo ZIO
flatMap e for.
Compondo ZIO é uma aula grátis de Scala for Backend Engineering & Functional Programming no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Scala for Backend Engineering & Functional Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
Sequenciamento com flatMap
ZIO é uma mônada, portanto flatMap encadeia efeitos em que cada etapa pode usar o resultado anterior. Os tipos de falha e de ambiente são combinados automaticamente.
import zio._
val prog =
ZIO.succeed(10).flatMap(n => Console.printLine(s"n = $n"))Compreensão for
A compreensão for é a forma idiomática de sequenciar efeitos ZIO: ela se parece com código imperativo, mas continua pura.
import zio._
val prog = for {
_ <- Console.printLine("Enter name:")
name <- Console.readLine
_ <- Console.printLine(s"Hello, $name")
} yield ()Combinando tipos de falha
Quando você compõe dois efeitos com tipos de falha diferentes, E1 e E2, o ZIO infere o menor supertipo comum de E1 with E2, geralmente Throwable ou um traço selado.
zip e zipPar
zip combina dois efeitos em uma tupla sequencialmente. zipPar os executa simultaneamente em 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 e zipLeft
*> (zipRight) mantém o segundo resultado; <* (zipLeft) mantém o primeiro. Ambos executam os efeitos na ordem.
import zio._
val r = Console.printLine("log") *> ZIO.succeed(99)foreach
ZIO.foreach executa um efeito para cada elemento de uma coleção e reúne os resultados, como um traverse.
import zio._
val prog = ZIO.foreach(List(1, 2, 3))(n => Console.printLine(n.toString))foreachPar
ZIO.foreachPar executa o efeito de cada elemento simultaneamente — ideal para E/S paralela, como várias solicitações HTTP.
import zio._
val ids = List(1, 2, 3)
val prog = ZIO.foreachPar(ids)(id => ZIO.succeed(id * 10))Efeitos condicionais
ZIO.when executa um efeito somente se uma condição for verdadeira, retornando um Option com o resultado. ZIO.unless é o inverso.
import zio._
def logIf(debug: Boolean) =
ZIO.when(debug)(Console.printLine("debugging"))Laços
ZIO.iterate e ZIO.loop criam laços com efeitos. repeatN executa novamente um efeito um número fixo de vezes.
import zio._
val ticks = Console.printLine("tick").repeatN(2) // runs 3 times totalUm fluxo de trabalho composto
Aqui, um fluxo de trabalho calcula uma soma e a imprime, composto inteiramente por pequenas etapas ZIO em uma compreensão for.
import zio._
val workflow = for {
a <- ZIO.succeed(20)
b <- ZIO.succeed(22)
_ <- Console.printLine(s"Sum: ${a + b}")
} yield ()Equivalente em Scala simples
A mesma lógica em Scala simples e ansioso, para comparação. ZIO adia e acompanha os efeitos no sistema de tipos, mas produz uma saída idêntica.
object Main {
def main(args: Array[String]): Unit = {
val a = 20
val b = 22
println(s"Sum: ${a + b}")
}
}Verificação rápida
Qual combinador executa um efeito para cada elemento de uma lista simultaneamente?
Recapitulação
Você compôs efeitos ZIO com:
flatMap/forpara sequenciamentozip/zipPar,*>,<*foreach/foreachParwhen/unlesse laços
A seguir: os canais de erros e dependências.
Perguntas Frequentes
A aula “Compondo ZIO” é grátis?
Sim — o texto completo de “Compondo ZIO” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Scala for Backend Engineering & Functional Programming, atualize para CoddyKit PRO. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
O que vou aprender em “Compondo ZIO”?
flatMap e for. Você pratica Scala for Backend Engineering & Functional Programming com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Scala for Backend Engineering & Functional Programming?
Nenhuma experiência prévia é necessária. Scala for Backend Engineering & Functional Programming no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Compondo ZIO”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Scala for Backend Engineering & Functional Programming?
Sim. Cada aula de Scala for Backend Engineering & Functional Programming inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.