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

Запуск приложений 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 — локальная установка не требуется.

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

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