case ist eine Kontrollflussstruktur, mit der wir einen gegebenen Wert mit vielen Mustern vergleichen können. Die Klauseln in einem case-Ausdruck werden von oben nach unten ausgewertet, bis eine Übereinstimmung gefunden wird.
In vielen Fällen ist die Verwendung von case austauschbar mit dem Definieren mehrerer Funktionsklauseln. Pattern Matching und Guards kannst du in case-Klauseln verwenden.
# 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"
Es gibt keine strengen Regeln, wann du das eine dem anderen vorziehst. Es ist eine Frage der persönlichen Vorliebe, die meist vom Kontext abhängt.