En Elixir, una sola función puede tener varias cláusulas. Esto se logra mediante la coincidencia de patrones en los argumentos de la función y el uso de guardas.
# pattern matching the argument
def number(7) do
"Awesome, that's my favorite"
end
# using a guard
def number(n) when is_integer(n) do
"That's not my favorite"
end
def number(_n) do
"That's not even a number!"
end
FunctionClauseError._ delante; de lo contrario, el compilador emite una advertencia.fn
13 -> "Awesome, that's my favorite"
_ -> "That's not my favorite"
end
Ten en cuenta que las funciones con varias cláusulas no deben confundirse con la sobrecarga de funciones que quizá conozcas de otros lenguajes de programación. En Elixir, las funciones se identifican solo por su nombre y su aridad, no por los tipos de sus argumentos (ya que no hay tipado estático). La función number/1 del ejemplo se considera una sola función sin importar cuántas cláusulas tenga.