Voilà quelques temps que je m'intéresse à la nouvelle star montante des langages de programmation : Ruby.

Etant donné que je ne suis pas du tout encore un expert sur le sujet, je ne vais pas m'éterniser, mais laissez moi partager quelques remarques avec vous. La communauté Ruby se vante, souvent à juste titre, d'utiliser un langage très expressif, piloté par les bonnes pratiques de développement. Cependant, je n'ai pu m'empêcher de noter quelques éléments qui, je trouve, contredisent cette affirmation.

Le premier constat vient tout simplement des méthodes de conversion, les classiques toString, toInt etc etc que nous pourrions trouver dans d'autres langages. Plutôt que d'utiliser des noms complets, en ruby nous allons trouver des to_s, to_a, to_i. Pour un langage qui se veut expressif, je trouve ça excessivement choquant d'utiliser des acronymes pas nécessairement évident.

Deuxième constat, saviez vous qu'il existe une différence entre les méthodes eql? et equal? L'un compare sur le type et valeur, et l'autre sur la référence. Différencier ces deux comportements juste par une convention de nommage très bancale me semble juste aberrant. Un débutant ne peut juste pas faire la différence, et même les plus expérimentés peuvent facilement se laisser tromper. Ruby se vante également d'être entièrement orienté objet, contrairement par exemple à Java ou C# qui font tout deux la différence entre des types primitifs et les types références. Cependant, les libs globalement fournies avec Ruby sont tout simplement noyautées de méthodes statiques. Pourquoi se venter d'être Full OO si c'est pour s'appuyer aussi lourdement sur une approche procédurale?

Enfin, dernière remarque, Ruby ne supporte pas la surcharge de méthode: le nom d'une méthode doit être unique dans une classe. Du coup, si on veut utiliser la surcharge, qui est tout de même très pratique, on doit accepter en fait un nombre variant de paramètres, et à nous de tester tous les cas d'appels que l'on veut gérer. La complexité cyclomatique générée par cette approche est juste énorme. La liste pourrait s'allonger encore, tant finalement le langage est l'interpréteur sont bourrés de "petits trucs" qui sont juste impossible à deviner et peuvent briser votre programme si vous ne les connaissez pas. Par exemple, j'utilisez un "gets" pour lire une entrée en mode console, et quand je me suis à passer un paramètre à la commande, ça ne fonctionnait plus. Le côté souvent "magique" de certaines parties de ruby brisent à mon sens le principe de moindre surprise, et le gets en est un bon exemple.

J'essaye de faire la part des choses bien entendu, et je n'ai essayé ici de citer ici que ce qui me semble être de vrais soucis, et non pas des habitudes provenant d'autres langages. Un langage qui vaut la peine d'être appris doit changer note manière de penser, et Ruby m'a effectivement apporté beaucoup, et je l'apprécie. Ceci dit, après un tel buzz, je ne peux pas m'empêcher d'être déçu par ces détails qui sont mines de rien, pas si insignifiants que ça.