LoginSignup
11
0

【Elixir アンチパターン】 エラーは隠さないで!

Last updated at Posted at 2023-12-23

引き続き、Elixir アンチパターンを読んでみます。

今日は、propagating-invalid-dataです。

エラーが発生してて、その個所はわかるんだけど、この原因がどこにあるのかわからない。こんな事ありますよね。
開発中なら、全体像がわかってるのですぐわかる場合も多いですが、運用中に発生したり、他の人が作ったものだったりするとほんと苦労します。安心して眠れません。

このアンチパターンは、そんな事態にならないようするのに役立つと思います。

foo()は引数をもっていて、この値をほかの関数に渡して、その結果を返しています。

defmodule MyLibrary do
  def foo(invalid_data) do
    # Some other code...

    MyLibrary.Internal.sum(1, invalid_data)
  end
end

foo渡すデータは整数である必要があるのに、文字列が渡されたとしたら、どうなるか。
MyLibrary.Internal.sumの中でエラーになります。

お勧めの実装は、

defmodule MyLibrary do
  def foo(data) when is_integer(data) do
    # Some other code

    MyLibrary.Internal.sum(1, data)
  end
end

foo()の引数の値が整数であることをguard節で明示しておきます。
これで、foo()を呼び出すところでエラーになります(fooでエラーが発生するのではなくその前の、本当の原因の所でエラーが発生します。

これで安心して眠れます。

契約プログラミングにつながる話でした。

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0