case es una estructura de control de flujo que nos permite comparar un valor dado con muchos patrones. Las cláusulas de una expresión case se evalúan de arriba hacia abajo, hasta que se encuentra una coincidencia.
En muchos casos, usar case es intercambiable con definir múltiples cláusulas de función. La coincidencia de patrones y las guardas se pueden usar en las cláusulas de case.
# one function clause, multiple case clauses
def age_group(age) do
case age do
0 -> ~c"infant"
age when age < 4 -> ~c"baby"
age when age < 13 -> ~c"child"
age when age < 18 -> ~c"teenager"
_ -> ~c"adult"
end
end
# multiple function clauses, no case
def age_group(0), do: ~c"infant"
def age_group(age) when age < 4, do: ~c"baby"
def age_group(age) when age < 13, do: ~c"child"
def age_group(age) when age < 18, do: ~c"teenager"
def age_group(_), do: ~c"adult"
No hay reglas estrictas para elegir una opción sobre la otra. Es una cuestión de preferencia personal que por lo general depende del contexto.