Ви

Винятки у Elixir

8 вправ

Про концепцію Винятки

Поведінка винятків визначає, як errors збуджуються та відображаються.

Вона містить два необовʼязкові колбеки:

  • message/1 перетворює структуру помилки на зрозуміле повідомлення.
  • exception/1 створює повідомлення з другого аргументу raise/2, що дає змогу змінити повідомлення.

Визначені помилки:

  • Мають ту саму назву, що й модуль, у якому їх реалізовано.
  • Є розширенням типу-структури.
  • Мають поле :message.
  • Можуть використовуватися з raise/1 і raise/2, щоб збудити потрібну помилку

Визначення винятку

Щоб визначити виняток у модулі помилки, скористаймося макросом defexception:

# Defines a minimal error, with the name `MyError`
defmodule MyError do
  defexception message: "error"
end

# Defines an error with a customized exception/1 function
defmodule MyCustomizedError do
  defexception message: "custom error"

  @impl true
  def exception(value) do
    case value do
      [] ->
        %MyCustomizedError{}

      _ ->
        %MyCustomizedError{message: "Alert: " <> value}
    end
  end
end

Використання винятків

Визначені помилки можна використовувати як вбудовану помилку за допомогою raise/1 або raise/2:

raise MyError
# => ** (MyError) error

raise MyError, "an error occurred"
# => ** (MyError) an error occurred

raise MyCustomizedError
# => ** (MyCustomizedError) "custom error"

raise MyCustomizedError, "a very bad error occurred"
# => ** (MyCustomizedError) Alert: a very bad error occurred
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Винятки

Практика заблокована

Розблокуйте ще 2 вправи, щоб практикувати концепцію Винятки