Truthiness: only false and nil
| Only false and nil are falsy | |
| Zero is truthy | |
| Empty is truthy | |
| Use it for guards |
Only false and nil are falsy
Elixir keeps the rule tiny: only false and nil count as falsy, and every other value counts as truthy. The bang operator flips a value into its boolean opposite, which exposes the rule:
!false # gives true
!nil # gives true
!true # gives false
!"hello" # gives false
Zero is truthy
Numbers never play the nothingness card here: zero is truthy, just like every other number. Beginners from other languages trip on this line most, so read it twice:
if 0 do
"yes"
else
"no"
end # gives "yes"
Empty is truthy
Empty values stay truthy as well: empty strings, empty lists, and empty maps all pass an if check. Test emptiness with dedicated functions such as String.length/1 or Enum.empty?/1 rather than with if:
if [] do
"truthy"
else
"falsy"
end # gives "truthy"
Use it for guards
This rule makes the or operator a clean default picker: it returns its first truthy value. The and operator mirrors it by returning its first falsy value or its last value:
input = nil
name = input || "guest" # gives "guest"
Note that real guard clauses still demand strict booleans, so keep this idiom in normal code.
Next: Conditions
Article author: Arthur Isaev