Komponowanie ZIO
flatMap i for
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 totalSkomponowany 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/fordo sekwencjonowaniazip/zipPar,*>,<*foreach/foreachParwhen/unlessoraz pętli
Dalej: kanały błędów i zależności.
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
- Efekt ZIO
- Komponowanie ZIO
- Kanały błędów i zależności
- Uruchamianie aplikacji ZIO