0020 Equal

Pourquoi autant de méthodes pour comparer?

  • equal? correspond à l’égalité des instances. Est-ce le même objet en mémoire?
  • == et eql? sont dans la plupart des cas des alias. Ils correspondent à l’égalité « naturelle » des valeurs des objets (Exception pour Object : alias de equal?).
  • === est appelé le « case equality ». C’est cette méthode qui est appelée dans un case...when. Par défaut c’est un alias de ==.

0020-equal_1.png

Le === peut être vue comme un notion d’appartenance : est-ce que tu appartiens à ce que je représente. ⚠️ Cette méthode est en général ni réflexive, ni symétrique, ni transitive.

0020-equal_2.png

La documentation précise : « The eql? method returns true if obj and other refer to the same hash key ». Dans la pratique, ça se traduit souvent par une égalité de type d’objet. eql? est en quelque sorte l’équivalent du === en Javascript (Et non le === de Ruby!).

0020-equal_3.png

⚠️ On peut trouver des contre-exemples sur certaines implémentations de la méthode eql? ne respectant pas la définition.

0020-equal_4.png

Les liens vers la documentation Ruby de ==, eql?, equal? et ===.