Scala for Backend Engineering & Functional Programming · Lekcja

Komponowanie ZIO

flatMap i for

Lekcja 2 z 413 kroki

Komponowanie ZIO to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Scala for Backend Engineering & Functional Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Sekwencjonowanie za pomocą flatMap

ZIO jest monadą, więc flatMap łączy efekty, a każdy krok może korzystać z wyniku poprzedniego. Typy błędów i środowiska są automatycznie łączone.

import zio._

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

wyrażenie for

Wyrażenie for jest idiomatycznym sposobem sekwencjonowania efektów ZIO. Przypomina kod imperatywny, a jednocześnie pozostaje czyste.

import zio._

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

Łączenie typów błędów

Gdy komponujesz dwa efekty z różnymi typami błędów E1 i E2, ZIO wywnioskuje najmniejszy wspólny nadtyp E1 with E2, często Throwable lub zapieczętowany trait.

zip i zipPar

zip sekwencyjnie łączy dwa efekty w krotkę. zipPar uruchamia je współbieżnie na osobnych włóknach.

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

*> (zipRight) zachowuje drugi wynik, a <* (zipLeft) zachowuje pierwszy. Oba operatory wykonują efekty w kolejności.

import zio._

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

foreach

ZIO.foreach wykonuje efekt dla każdego elementu kolekcji i zbiera wyniki, podobnie jak traverse.

import zio._

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

foreachPar

ZIO.foreachPar współbieżnie wykonuje efekt dla każdego elementu — idealnie nadaje się do równoległych operacji wejścia-wyjścia, takich jak wiele żądań HTTP.

import zio._

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

Efekty warunkowe

ZIO.when wykonuje efekt tylko wtedy, gdy warunek jest prawdziwy, zwracając Option z wynikiem. ZIO.unless działa odwrotnie.

import zio._

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

Pętle

ZIO.iterate i ZIO.loop budują pętle wykonujące efekty. repeatN uruchamia efekt ponownie określoną liczbę razy.

import zio._

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

Skomponowany przepływ pracy

Ten przepływ pracy oblicza sumę i ją wyświetla, korzystając wyłącznie z małych kroków ZIO połączonych w wyrażeniu for.

import zio._

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

Odpowiednik w zwykłej Scali

Ta sama logika w zachłannej, zwykłej Scali dla porównania. ZIO odracza wykonanie i śledzi efekty w systemie typów, ale generuje identyczny wynik.

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

Szybkie sprawdzenie

Który kombinator wykonuje efekt dla każdego elementu listy współbieżnie?

Podsumowanie

Komponowałeś efekty ZIO za pomocą:

  • flatMap / for do sekwencjonowania
  • zip / zipPar, *>, <*
  • foreach / foreachPar
  • when / unless oraz pętli

Dalej: kanały błędów i zależności.

Bezpłatny start

Ucz się Scala dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
39
Lekcje
143

Często zadawane pytania

Czy lekcja „Komponowanie ZIO” jest bezpłatna?

Tak — pełny tekst „Komponowanie ZIO” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Scala for Backend Engineering & Functional Programming, przejdź na CoddyKit PRO. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „Komponowanie ZIO”?

flatMap i for Ćwiczysz Scala for Backend Engineering & Functional Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Scala for Backend Engineering & Functional Programming?

Nie wymagamy żadnego doświadczenia. Scala for Backend Engineering & Functional Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Komponowanie ZIO”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Scala for Backend Engineering & Functional Programming?

Tak. Każda lekcja Scala for Backend Engineering & Functional Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Efekt ZIO
  2. Komponowanie ZIO
  3. Kanały błędów i zależności
  4. Uruchamianie aplikacji ZIO
← Powrót do Scala for Backend Engineering & Functional Programming