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のtryrescue**は命令型言語の伝統的なtry-catchに似ていますが、Elixirの明示性を好むため、頻繁には使用されません。
  • スーパーバイザーとGenServersは、ElixirのOTPフレームワークの一部であり、障害耐性に関するものです。それらはあなたのコードのプロセスを監視し、物事がおかしくなったら再起動する準備ができています。

実装の面では、ElixirはErlangの堅牢性に基づいて構築されています。エラーはパターンマッチングと関数型の良さを使って扱うべきもう一種のメッセージとして扱われます。

参照する

Elixirでのエラー処理に関するさらなる読み物: