Accueil > Informatique > === et commutativité

=== et commutativité

Récemment j’ai perdu pas mal de temps sur une broutille en Ruby. J’étais en train d’écrire un petit programme utilisant la très pratique bibliothèque DBF, et je souhaitais gérer différents cas selon le type des champs. Chaque valeur d’un champs étant une instance d’une classe adaptée, j’ai rapidement pensé à utiliser case/when. Comme je débute, je démarre irb, je teste bêtement l’opérateur === et … ça ne fonctionne pas. Mince alors ! J’ai cherché dans les docs, google, …

Finalement tout est rentré dans l’ordre, je me suis posé la bonne question, mais n’ai pas fait le bon test : l’opérateur === n’est pas commutatif ! D’ailleurs ce n’est pas un opérateur, mais une méthode, pour être précis. Une fois que l’on a compris cela parait si simple, un truc idiot de débutant… (non pas en Ruby, mais en informatique). Mais voilà, ça arrive, surtout pour ceux qui ne sont pas réveillés au moment de se poser les bonnes questions ;)

Concrètement, lorsque ce code est utilisé (note aux blondes : ce n’est pas du basic, les numéros de lignes sont là pour faire joli) :

1	case mon_instance
2 		when String	: puts "chaine"
3		when Date	: puts "date"
4		else puts "autre chose"
5	end

Il faut bien comprendre que ce qui est exécuté est similaire à String===mon_instance , et non l’inverse. Exemple avec irb :

>> a=String.new
=> ""
>> a === String
=> false
>> String === a
=> true

C’est aussi simple que ça. Mais c’est mieux quand on y pense :)

Sam. Informatique

  1. Pas encore de commentaire
  1. Pas encore de trackbacks