Elixir represents true and false values with the boolean type. There are only two values: true and false. These values can be combined with boolean operators (and/2, or/2, not/1):
true_variable = true and true
false_variable = true and false
true_variable = false or true
false_variable = false or false
true_variable = not false
false_variable = not true
The operators and/2, or/2, and not/1 are strictly boolean which means they require their first argument to be a boolean. There are also equivalent boolean operators that work any type of arguments - &&/2, ||/2, and !/1.
Boolean operators use short-circuit evaluation, which means that the expression on the right-hand side of the operator is only evaluated if needed.
Each of the operators has a different precedence, where not/1 is evaluated before and/2 and or/2. Brackets can be used to evaluate one part of the expression before the others:
not true and false
# => false
not (true and false)
# => true
When writing a function that returns a boolean value, it is idiomatic to end the function name with a ?. The same convention can be used for variables that store boolean values.
def either_true?(a?, b?) do
a? or b?
end