Scala for Backend Engineering & Functional Programming · Урок

Эффект ZIO

ZIO[R,E,A]

Урок 1 из 413 шагов

«Эффект 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, attempt
  • map и 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 — локальная установка не требуется.

Все уроки этого курса

  1. Эффект ZIO
  2. Композиция ZIO
  3. Каналы ошибок и зависимостей
  4. Запуск приложений ZIO
← Назад к Scala for Backend Engineering & Functional Programming