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.