case یک ساختار کنترل جریان است که به ما امکان میدهد یک مقدار دادهشده را با الگوهای متعددی مقایسه کنیم. بندهای یک عبارت case از بالا به پایین ارزیابی میشوند تا زمانی که تطبیقی پیدا شود.
در بسیاری از موارد، استفاده از case با تعریف چند بند تابع قابل جایگزینی است. از تطبیق الگو و گاردها میتوان در بندهای 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"
هیچ قاعدهی سختگیرانهای برای انتخاب یکی از این دو بهجای دیگری وجود ندارد. این موضوع به سلیقهی شخصی بستگی دارد که معمولاً به بافت وابسته است.