Conditions
| if and else | |
| unless | |
| case | |
| cond chains |
if and else
The if expression runs one branch when its condition is truthy and the other branch otherwise. Close the branch with the end keyword:
age = 20
if age >= 18 do
IO.puts("adult")
else
IO.puts("minor")
end
adult
The whole if returns a value, though printing inside each branch is clearer at first.
unless
unless is if turned upside down: the body runs only when the condition is falsy. Reach for unless when the negative case reads better without a negation mark:
logged_in = false
unless logged_in do
IO.puts("guest")
end
guest
case
case matches one value against a list of patterns from top to bottom. The first pattern that fits wins, and the underscore matches anything left over:
role = :admin
case role do
:admin -> IO.puts("full access")
:guest -> IO.puts("read only")
_ -> IO.puts("unknown")
end
full access
Atoms from the previous lesson make natural case labels.
cond chains
cond chains several full conditions when no single value sits at the center. Each line tests its left side, and the matching right side runs. A final true line works as the fallback, much like else elsewhere:
score = 85
cond do
score >= 90 -> IO.puts("excellent")
score >= 70 -> IO.puts("good")
true -> IO.puts("needs work")
end
good
Next: Recursion replaces loops
Article author: Arthur Isaev