ガードは、パターンマッチングを補完するものとして使われます。ガードを使うと、より複雑なチェックができます。パターンマッチングが使える場面のうち、すべてではありませんが、いくつかの場面で使えます。たとえば、関数の節やcase節などです。
def empty?(list) when is_list(list) and length(list) == 0 do
true
end
ガードはwhenキーワードで始まり、そのあとに真偽値の式が続きます。
ガード式は特別な関数で、次の条件を満たす必要があります。
trueまたはfalseを返すこと。よく使われるガードの一覧は、Elixirのドキュメントにあります。次のようなものがあります。
defguardを使えば、独自のガードを定義できます。
Elixirの命名規則では、ガードの名前はis_で始めることになっています。
defmodule HTTP do
defguard is_success(code) when code >= 200 and code < 300
def handle_response(code) when is_success(code) do
:ok
end
end