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:

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

Що стосується реалізації, Elixir побудований на міцності Erlang. Він розглядає помилки як ще один тип повідомлень, які потрібно обробляти з усім зіставленням зразків та функціональним добром.

Дивіться також

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