Guards são usados como complemento ao pattern matching. Permitem verificações mais complexas. Podem ser usados em algumas situações, mas não todas em que o pattern matching pode ser usado, por exemplo em cláusulas de função ou cláusulas de case.
def empty?(list) when is_list(list) and length(list) == 0 do
true
end
Os guards começam com a palavra-chave when, seguida de uma expressão booleana.
As expressões de guard são funções especiais que:
true ou false.Uma lista dos guards mais comuns está na documentação do Elixir. Ela inclui:
Você pode definir seus próprios guards com defguard.
De acordo com a convenção de nomenclatura do Elixir, os nomes de guards devem começar com 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