Ruby && vs And
Pour les expressions booléennes ou le contrôle de flux, &&
et and
peuvent être utilisés.
La différence entre eux est l’ordre de préséance. L’opérateur and
est moins prioritaire que l’opérateur =
alors que &&
est plus prioritaire que l’opérateur =
.
Considérez ces deux expressions booléennes.
puts var_1 = true && false
puts var_2 = true and false
Production :
false
true
Les deux expressions renvoient false
, mais var_1
et var_2
auront des valeurs différentes qui leur sont attribuées.
var_1 = true && false
est équivalent à var_1 = (true && false)
, var_1
est égal à false
.
En revanche, var_2 = true et false
sera évalué comme (var_2 = true) et false
. Cela signifie que var_2
contiendra éventuellement la valeur true
.
puts var_1
puts var_2
Production :
false
true
Pour cette raison, n’utilisez jamais and
avec un opérateur ternaire comme celui-ci.
s = true and 2.even? ? 'even' : 'odd'
puts s
Production :
true
On pourrait s’attendre à ce qu’il imprime even
, mais au lieu de cela, il retourne true
.