Эффект ZIO
ZIO[R,E,A]
«Эффект ZIO» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Что такое ZIO?
ZIO — это библиотека асинхронных, параллельных и безопасных для ресурсов функциональных эффектов. Основной тип — ZIO[R, E, A]: описание рабочего процесса, который при наличии окружения R может завершиться с ошибкой E или успешно выдать A.
Три параметра типа
Читайте ZIO[R, E, A] как функцию R => Either[E, A] (асинхронную и с эффектами):
R— необходимое окружение или зависимостиE— тип ошибки при неуспешном завершенииA— тип значения при успешном завершении
Псевдонимы типов
ZIO предоставляет удобные псевдонимы:
UIO[A]=ZIO[Any, Nothing, A]— не может завершиться с ошибкойTask[A]=ZIO[Any, Throwable, A]IO[E, A]=ZIO[Any, E, A]RIO[R, A]=ZIO[R, Throwable, A]
Создание успешных эффектов
ZIO.succeed поднимает чистое значение. Эффект не может завершиться с ошибкой, поэтому его тип ошибки — Nothing.
import zio._
val meaning: UIO[Int] = ZIO.succeed(42)Создание ошибок
ZIO.fail создаёт неуспешный эффект с типизированной ошибкой. Тип успеха — Nothing, поскольку эффект никогда не завершается успешно.
import zio._
val failed: IO[String, Nothing] = ZIO.fail("Something went wrong")Оборачивание побочных эффектов
ZIO.attempt оборачивает блок с побочными эффектами, который может выбросить исключение; типом ошибки становится Throwable (получается Task).
import zio._
val parsed: Task[Int] = ZIO.attempt("123".toInt)Вывод в консоль
Сервис Console в ZIO предоставляет вывод с эффектом. Console.printLine возвращает ZIO, тип ошибки которого — IOException.
import zio._
val hello = Console.printLine("Hello, ZIO!")map
map преобразует значение успешного результата, оставляя каналы ошибок и окружения без изменений.
import zio._
val doubled: UIO[Int] = ZIO.succeed(21).map(_ * 2)mapError
mapError преобразует канал ошибок — это полезно для преобразования низкоуровневых сбоев в предметно-ориентированные ошибки.
import zio._
val e: IO[String, Int] =
ZIO.fail(404).mapError(code => s"HTTP $code")Ленивость и чистота
Как и IO из Cats Effect, значение ZIO является чистым ленивым описанием. Его создание не выполняет эффектов; они выполняются только при запуске в среде выполнения ZIO.
Базовый вариант на чистой Scala
Для сравнения рассмотрим нетерпеливую автономную программу на Scala. ZIO отложил бы выполнение и отслеживал ошибки в типе, но результат был бы тем же.
object Main {
def main(args: Array[String]): Unit = {
val x = 42
println(s"value: $x")
}
}Быстрая проверка
Что обозначает параметр E в ZIO[R, E, A]?
Итоги
Вы изучили тип эффекта ZIO:
ZIO[R, E, A]— окружение, ошибка, успешный результат- Псевдонимы
UIO,Task,IO,RIO succeed,fail,attemptmapиmapError
Далее: композиция эффектов ZIO.
Изучай Scala с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 39
- Уроки
- 143
Часто задаваемые вопросы
Урок «Эффект ZIO» бесплатный?
Да — полный текст урока «Эффект ZIO» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «Эффект ZIO»?
ZIO[R,E,A] Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Эффект ZIO»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.