Elixir:
Обработка ошибок

Как:

В Elixir мы часто используем сопоставление с образцом и оператор case для обработки различных исходов, включая ошибки.

defmodule Example do
  def divide(a, b) do
    case b do
      0 -> {:error, "Невозможно разделить на ноль."}
      _ -> {:ok, a / b}
    end
  end
end

# Успешное деление
{:ok, result} = Example.divide(10, 2)
IO.puts("10 / 2 это #{result}")

# Попытка разделить на ноль
{:error, reason} = Example.divide(10, 0)
IO.puts("Ошибка: #{reason}")

Пример вывода:

10 / 2 это 5.0
Ошибка: Невозможно разделить на ноль.

Когда вы запускаете этот код на Elixir, вы получите либо успешное деление, либо сообщение об ошибке, в зависимости от ваших входных данных. Здесь не будет сбоев!

Подробнее

В прошлом, обработка ошибок часто сводилась к проверке возвращаемых значений. Однако, учитывая функциональные корни Elixir, у нас есть сопоставление с образцом и тегированные кортежи, вроде {:ok, value} или {:error, reason}, что является более элегантным решением.

Есть и другие способы обработки ошибок в Elixir:

  • try и rescue в Elixir, которые напоминают традиционный try-catch в императивных языках, но используются реже из-за предпочтения Elixir к явности.
  • Супервизоры и GenServers, часть фреймворка OTP Elixir, которые больше связаны с устойчивостью к ошибкам. Они следят за процессом вашего кода, готовые перезапустить его, если что-то пойдет не так.

С точки зрения реализации, Elixir опирается на надежность Erlang. Ошибки здесь рассматриваются как еще один тип сообщений, которые должны быть обработаны со всем сопоставлением с образцом и функциональными особенностями.

Смотрите также

Для дальнейшего изучения обработки ошибок в Elixir, рекомендуем посмотреть: