0Pricing
Scala for Backend Engineering & Functional Programming · Aula

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 total

Um 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 / for para sequenciamento
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless e 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.

Todas as aulas deste curso

  1. O efeito ZIO
  2. Compondo ZIO
  3. Canais de erros e dependências
  4. Executando aplicações ZIO
← Voltar para Scala for Backend Engineering & Functional Programming