Différence entre OR et Double Pipe Operator en Ruby

Nurudeen Ibrahim 18 avril 2022
Différence entre OR et Double Pipe Operator en Ruby

Le or et le || sont tous deux des opérateurs logiques en Ruby ; ils peuvent prêter à confusion en raison de leur comportement similaire. Il n’y a qu’une légère différence entre eux, et dans ce didacticiel, nous verrons en quoi ils sont différents et comment chacun doit être utilisé.

Une chose importante à retenir est qu’ils se comportent de la même manière s’ils apparaissent dans une expression qui ne contient aucun autre opérateur. Sinon, ils se comportent différemment.

Lorsqu’aucun autre opérateur n’est impliqué

Dans cette classification, les deux opérateurs se comportent de la même manière, renvoyant la première valeur de vérité.

Exemple de code :

nil or 5
2 or 4

Production :

5
2

Exemple de code :

nil || 5
2 || 4

Production :

5
2

Notez que dans les exemples ci-dessus, les codes sont sous la forme expression et non d’une déclaration. Combiner tout ce qui en fera une déclaration produirait un résultat inattendu.

Par exemple, nil ou 5 est une expression qui peut être transmise, peut-être comme argument à une méthode ou assignée à une variable, alors que puts nil or 5 est une instruction complète en soi.

La meilleure façon de tester les expressions Ruby est d’utiliser le Ruby interactif IRB. Il est préinstallé sur macOS. Pour tester avec IRB, suivez les étapes ci-dessous.

  • Ouvrir un terminal
  • Tapez irb et appuyez sur Enter. Cela affichera une invite
  • Tapez votre expression, par exemple, nil || 5, et appuyez sur Enter.
  • Le résultat de l’expression apparaîtra sur la ligne suivante

Lorsque d’autres opérateurs sont impliqués

Nous nous concentrons sur la valeur de a après avoir évalué le code dans les exemples ci-dessous.

Exemple de code :

a = nil or 5
b = 2 or 4
puts a
puts b

Production :

nil
2

Exemple de code :

a = nil || 5
b = 2 || 4
puts a
puts b

Production :

5
2

La meilleure façon d’expliquer le comportement ci-dessus est de regarder les opérateurs Ruby table de priorité. Chaque fois qu’une expression est composée de plusieurs opérateurs, comme nous l’avons fait dans les exemples ci-dessus, nous devons les évaluer en fonction de leur priorité.

Le tableau montre que l’opérateur = a une priorité plus élevée que l’opérateur or mais qu’il est inférieur au || opérateur. Par conséquent, l’ordre d’évaluation dans les exemples peut être décomposé comme indiqué ci-dessous.

(a = nil) or 5
(b = 2) or 4
a = (nil || 5)
b = (2 || 4)

Bien que nous ayons décidé d’utiliser l’opérateur = dans les exemples ci-dessus, nous pouvons utiliser n’importe quel opérateur supérieur à or mais inférieur à || et obtenir le même comportement ; un exemple est +=.

Exemple de code :

a = 1
a += 2 || 4    # a += (2 || 4)
puts a

Production :

3

Exemple de code :

a = 1
a += 2 or 4      # (a += 2) or 4
puts a

Production :

3

Exemple de code :

a = 1
a += nil || 5      # a += (nil || 5)
puts a

Production :

6

Exemple de code :

a = 1
a += nil or 5      # (a += nil) or 5

Il lancera une TypeError (nil can't be coerced into Integer) car Ruby essaie d’abord d’évaluer l’expression entre parenthèses, en incrémentant a par nil.

Article connexe - Ruby Operator