Elixir - Operadores lógicos

Elixir fornece 6 operadores lógicos: and, or, not, &&, || e! Os três primeiros,and or notsão operadores booleanos estritos, o que significa que eles esperam que seu primeiro argumento seja um booleano. O argumento não booleano gerará um erro. Enquanto os próximos três,&&, || and !não são estritos, não exigem que tenhamos o primeiro valor estritamente como um booleano. Eles funcionam da mesma maneira que suas contrapartes estritas. Assumir variávelA é verdadeiro e variável B contém 20, então -

Operador Descrição Exemplo
e Verifica se ambos os valores fornecidos são verdadeiros; em caso afirmativo, retorna o valor da segunda variável. (Lógico e). A e B darão 20
ou Verifica se algum valor fornecido é verdadeiro. Retorna o valor verdadeiro. Else retorna falso. (Lógico ou). A ou B dará verdadeiro
não Operador unário que inverte o valor da entrada dada. não A dará falso
&& Não estrito and. Funciona igual aand mas não espera que o primeiro argumento seja um booleano. B && A dará 20
|| Não estrito or. Funciona igual aor mas não espera que o primeiro argumento seja um booleano. B || A vai dar verdadeiro
! Não estrito not. Funciona igual anot mas não espera que o argumento seja um booleano. ! A vai dar falso

NOTE − e , ou , && e || são operadores de curto-circuito. Isso significa que se o primeiro argumento deandfor falso, então ele não verificará mais o segundo. E se o primeiro argumento deorfor verdadeiro, então ele não verificará o segundo. Por exemplo,

false and raise("An error")  
#This won't raise an error as raise function wont get executed because of short
#circuiting nature of and operator.

Exemplo

Tente o código a seguir para entender todos os operadores aritméticos do Elixir.

a = true
b = 20

IO.puts("a and b " <> to_string(a and b))

IO.puts("a or b " <> to_string(a or b))

IO.puts("not a " <> to_string(not a))

IO.puts("b && a" <> to_string(b && a))

IO.puts("b || a " <> to_string(b || a))

IO.puts("!a " <> to_string(!a))

O programa acima gera o seguinte resultado -

a and b 20
a or b true
not a false
b && a true
b || a 20
!a false