Elixir - Opérateurs logiques

Elixir fournit 6 opérateurs logiques: and, or, not, &&, || et !. Les trois premiers,and or notsont des opérateurs booléens stricts, ce qui signifie qu'ils s'attendent à ce que leur premier argument soit un booléen. Un argument non booléen déclenchera une erreur. Alors que les trois suivants,&&, || and !ne sont pas strictes, ne nous obligent pas à avoir la première valeur strictement sous forme de booléen. Ils fonctionnent de la même manière que leurs homologues stricts. Supposons une variableA est vrai et variable B détient 20, alors -

Opérateur La description Exemple
et Vérifie si les deux valeurs fournies sont véridiques, si oui, renvoie la valeur de la deuxième variable. (Logique et). A et B donneront 20
ou Vérifie si l'une des valeurs fournies est véridique. Renvoie la valeur la plus vraie. Sinon, retourne false. (Logique ou). A ou B donnera vrai
ne pas Opérateur unaire qui inverse la valeur d'une entrée donnée. pas A donnera faux
&& Non strict and. Fonctionne de la même manière queand mais ne s'attend pas à ce que le premier argument soit un booléen. B && A donnera 20
|| Non strict or. Fonctionne de la même manière queor mais ne s'attend pas à ce que le premier argument soit un booléen. B || A donnera vrai
! Non strict not. Fonctionne de la même manière quenot mais ne s'attend pas à ce que l'argument soit un booléen. ! A donnera faux

NOTE − et , ou , && et || sont des opérateurs de court-circuit. Cela signifie que si le premier argument deandest faux, alors il ne recherchera plus le second. Et si le premier argument deorest vrai, alors il ne recherchera pas le second. Par exemple,

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.

Exemple

Essayez le code suivant pour comprendre tous les opérateurs arithmétiques d'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))

Le programme ci-dessus génère le résultat suivant -

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