Ruby && vs And

Stewart Nguyen 18 avril 2022
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.