Scala for Backend Engineering & Functional Programming · Leçon

Composer ZIO

flatMap et for

Leçon 2 sur 413 étapes

Composer ZIO est une leçon Scala for Backend Engineering & Functional Programming gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Scala for Backend Engineering & Functional Programming, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Scala for Backend Engineering & Functional Programming comprend 4 leçons au total.

Enchaînement avec flatMap

ZIO est une monade ; flatMap enchaîne donc les effets, chaque étape pouvant utiliser le résultat précédent. Les types d’erreur et d’environnement sont combinés automatiquement.

import zio._

val prog =
  ZIO.succeed(10).flatMap(n => Console.printLine(s"n = $n"))

Compréhension for

La compréhension for est la manière idiomatique d’enchaîner les effets ZIO. Elle se lit comme du code impératif tout en restant pure.

import zio._

val prog = for {
  _    <- Console.printLine("Enter name:")
  name <- Console.readLine
  _    <- Console.printLine(s"Hello, $name")
} yield ()

Combiner les types d’erreur

Lorsque vous composez deux effets dont les types d’erreur sont différents, E1 et E2, ZIO déduit leur plus petit majorant commun, souvent Throwable ou un trait scellé.

zip et zipPar

zip combine séquentiellement deux effets en un tuple. zipPar les exécute simultanément sur des fibres distinctes.

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 et zipLeft

*> (zipRight) conserve le deuxième résultat ; <* (zipLeft) conserve le premier. Les deux exécutent les effets dans l’ordre.

import zio._

val r = Console.printLine("log") *> ZIO.succeed(99)

foreach

ZIO.foreach exécute un effet pour chaque élément d’une collection et rassemble les résultats, comme le ferait un parcours.

import zio._

val prog = ZIO.foreach(List(1, 2, 3))(n => Console.printLine(n.toString))

foreachPar

ZIO.foreachPar exécute simultanément l’effet de chaque élément — idéal pour les entrées-sorties parallèles, comme plusieurs requêtes HTTP.

import zio._

val ids = List(1, 2, 3)
val prog = ZIO.foreachPar(ids)(id => ZIO.succeed(id * 10))

Effets conditionnels

ZIO.when n’exécute un effet que si une condition est vraie et retourne un Option du résultat. ZIO.unless est l’opération inverse.

import zio._

def logIf(debug: Boolean) =
  ZIO.when(debug)(Console.printLine("debugging"))

Boucles

ZIO.iterate et ZIO.loop construisent des boucles produisant des effets. repeatN réexécute un effet un nombre fixe de fois.

import zio._

val ticks = Console.printLine("tick").repeatN(2) // runs 3 times total

Un flux de travail composé

Ici, un flux de travail calcule une somme et l’affiche, en étant entièrement composé de petites étapes ZIO dans une compréhension for.

import zio._

val workflow = for {
  a <- ZIO.succeed(20)
  b <- ZIO.succeed(22)
  _ <- Console.printLine(s"Sum: ${a + b}")
} yield ()

Équivalent en Scala classique

Voici la même logique en Scala classique et avide, à titre de comparaison. ZIO diffère les effets et les suit dans le système de types, mais produit une sortie identique.

object Main {
  def main(args: Array[String]): Unit = {
    val a = 20
    val b = 22
    println(s"Sum: ${a + b}")
  }
}

Vérification rapide

Quel combinateur exécute simultanément un effet pour chaque élément d’une liste ?

Récapitulatif

Vous avez composé des effets ZIO avec :

  • flatMap / for pour l’enchaînement
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless et les boucles

Ensuite : les canaux d’erreur et de dépendances.

Gratuit pour commencer

Apprends Scala avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
39
Leçons
143

Questions Fréquemment Posées

La leçon « Composer ZIO » est-elle gratuite ?

Oui — le texte complet de « Composer ZIO » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Scala for Backend Engineering & Functional Programming, passe à CoddyKit PRO. Le cours Scala for Backend Engineering & Functional Programming comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Composer ZIO » ?

flatMap et for Tu pratiques Scala for Backend Engineering & Functional Programming avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Scala for Backend Engineering & Functional Programming ?

Aucune expérience préalable n'est requise. Scala for Backend Engineering & Functional Programming sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Composer ZIO » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Scala for Backend Engineering & Functional Programming ?

Oui. Chaque leçon Scala for Backend Engineering & Functional Programming inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. L’effet ZIO
  2. Composer ZIO
  3. Canaux d’erreurs et de dépendances
  4. Exécuter des applications ZIO
← Retour à Scala for Backend Engineering & Functional Programming