Запуск приложений ZIO
ZIOAppDefault
«Запуск приложений ZIO» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
От описания к выполнению
Значение ZIO — это лишь план. Чтобы выполнить его, передайте его среде выполнения ZIO, обычно унаследовав приложение от ZIOAppDefault, а не вызывая среду выполнения вручную.
ZIOAppDefault
Унаследуйте приложение от ZIOAppDefault и реализуйте run. Платформа предоставляет стандартные службы (Console, Clock, Random, System) и управляет запуском и завершением работы.
import zio._
object Hello extends ZIOAppDefault {
def run = Console.printLine("Hello, ZIO!")
}Значение run
run — это ZIO, окружение которого обеспечивается стандартными службами. Типы ошибки и успешного результата могут быть произвольными; среда выполнения сообщает о сбоях и устанавливает код завершения.
Приложение из нескольких шагов
Составьте логику приложения с помощью for-композиции. Каждая строка представляет эффект, который среда выполнения выполняет последовательно.
import zio._
object Greeter extends ZIOAppDefault {
def run = for {
_ <- Console.printLine("What is your name?")
name <- Console.readLine
_ <- Console.printLine(s"Hello, $name!")
} yield ()
}Предоставление слоёв в run
Если приложению нужны пользовательские службы, передайте их слои через provide эффекту run, чтобы перед выполнением окружение было полностью обеспечено.
import zio._
object App extends ZIOAppDefault {
// def run = program.provide(MyService.layer)
def run = ZIO.unit
}Коды завершения
По умолчанию успешное выполнение run завершается с кодом 0, а выполнение с ошибкой — с ненулевым кодом. Можно также вернуть явный ExitCode с помощью exitCode.
import zio._
object App extends ZIOAppDefault {
def run = Console.printLine("done").exitCode
}Аргументы командной строки
Получить аргументы программы можно через ZIOAppArgs, используя ZIOApp.args или getArgs; результатом будет Chunk[String].
import zio._
object App extends ZIOAppDefault {
def run = for {
args <- getArgs
_ <- Console.printLine(s"args: ${args.mkString(", ")}")
} yield ()
}Обработка сбоев на границе приложения
Рекомендуется обрабатывать ошибки или записывать их в журнал на верхнем уровне, чтобы среда выполнения выводила понятное сообщение. Используйте catchAll или tapError в run.
import zio._
object App extends ZIOAppDefault {
val logic = ZIO.fail("oops")
def run = logic.catchAll(e => Console.printLine(s"Failed: $e"))
}Создание волокон
Внутри run можно запускать эффекты в волокнах с помощью fork для параллельного выполнения, а позже объединять их с помощью join. Среда выполнения контролирует все волокна и прерывает их при завершении работы.
import zio._
val prog = for {
fiber <- ZIO.succeed(40).fork
result <- fiber.join
_ <- Console.printLine(s"got $result")
} yield ()Ручной небезопасный запуск
Вне ZIOAppDefault эффект можно запустить с помощью Unsafe.unsafe и Runtime, но такой подход предназначен для границ интеграции, а не для обычного кода приложения.
import zio._
// Unsafe.unsafe { implicit u =>
// Runtime.default.unsafe.run(myEffect).getOrThrow()
// }Основной метод на чистой Scala
Для сравнения рассмотрим автономную точку входа Scala. ZIOAppDefault выполняет роль main, но также подключает службы, отчёты об ошибках и контроль волокон.
object Main {
def main(args: Array[String]): Unit = {
println("Hello, ZIO!")
}
}Быстрая проверка
Как рекомендуется запускать приложение ZIO?
Итоги
Вы научились запускать приложения ZIO:
ZIOAppDefaultс эффектомrun- стандартные службы и
provideслоёв - коды завершения, аргументы и обработка ошибок на верхнем уровне
- создание волокон и небезопасные границы
Вы завершили курс «Основы ZIO».
Часто задаваемые вопросы
Урок «Запуск приложений ZIO» бесплатный?
Да — полный текст урока «Запуск приложений ZIO» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «Запуск приложений ZIO»?
ZIOAppDefault Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Запуск приложений ZIO»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Эффект ZIO
- Композиция ZIO
- Каналы ошибок и зависимостей
- Запуск приложений ZIO