O Elixir representa os valores true e false com o tipo booleano. Existem apenas dois valores: true e false. Estes valores podem ser combinados com operadores Boolean (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
Os operadores and/2, or/2 e not/1 são estritamente do tipo Boolean, o que significa que exigem que o seu primeiro argumento seja um Boolean. Existem também operadores Boolean equivalentes que funcionam com qualquer tipo de argumentos: &&/2, ||/2 e !/1.
Os operadores Boolean usam avaliação de curto-circuito, o que significa que a expressão do lado direito do operador só é avaliada se for necessário.
Cada um dos operadores tem uma precedência diferente, em que not/1 é avaliado antes de and/2 e or/2. Podes usar parênteses para avaliar uma parte da expressão antes das restantes:
not true and false
# => false
not (true and false)
# => true
Quando escreves uma função que devolve um valor Boolean, é idiomático terminar o nome da função com um ?. A mesma convenção pode ser usada para variáveis que guardam valores Boolean.
def either_true?(a?, b?) do
a? or b?
end