Diferença de Ruby entre & amp & amp, ||, e, ou

Como você deve saber em Ruby, você pode usar operadores booleanos como:
&&, ||, !
adicionalmente, existem:
and, or, not
operadores.

À primeira vista, eles são apenas sinônimos um do outro. Mas se olhar mais profundamente, há pequenas diferenças entre eles:
1. Você não pode sobrescrever / sobrecarregar os operadores, &&, ||mas pode fazer isso com and, or
2. A diferença mais importante é que os &&, ||, !operadores têm precedências diferentes and, or, not.
O que isso significa na prática? Alguns exemplos:


#example 1
true || false && false #=> true

#example 2
true or false and false #=> false

Essas expressões simples parecem iguais, mas os resultados são diferentes. A razão disso é a ordem diferente das verificações booleanas. No primeiro exemplo &&tem maior precedência ||, então , à primeira vista, é acionada a verificação e o resultado disso é verificado com . No segundo exemplo, os operadores booleanos têm a mesma precedência, então a verificação booleana é feita da esquerda para a direita, o que dá resultados diferentes.false && false||

Mais um pequeno exemplo:

#example 3
a
= true and b = a #=> true
puts a
, b #=> true
true

#example 4
x
= true && y = x #=> nil
puts x
, y #=> nil
nil

Mais uma vez, resultados diferentes por causa de diferentes precedências de operadores – && tem maior e andmenor para =. No exemplo 3, primeiro a atribuição foi feita e após a verificação com and, no exemplo 4 de forma oposta, a verificação booleana foi feita. Para fazer o exemplo 4 funcionar como exemplo 3, é necessário introduzir parênteses:

(x = true)  &&  (y = x) #=> true
puts x
, y #=> true
true