Récits d'un GeekTrotter Carnet de bord binaire

1janv./110

Python (PyQt4) ou Ruby (RubyQt) ?

Voilà plusieurs années que je code en Qt/C++ et que j'en suis très satisfait.
Ça permet de créer des applications graphiques puissantes relativement simplement.
Mais C++ commence à se faire vieux, et d'autres "jeunes" langages tels que Python et Ruby font de plus en plus parler d'eux.

Et il se trouve que le framework Qt possède des bindings pour Java, Python et Ruby !
L'occasion de se lancer dans un nouveau langage.
Voyons dans cet article mon approche de ces langages.

Le framework QtJambi pour Java n'est plus maintenu, et mon expérience passée avec la lenteur de Java et Eclipse (et des deux réunis...) m'ont vite retenu de me lancer dans QtJambi.
De plus, Java n'est pas vraiment "nouveau" pour personne...

Voilà donc Ruby et Python.
Python semble beaucoup plus populaire, plus ancien et possédant une bonne communauté de développeurs développant tonnes de librairies.
Ruby quant à lui semble être le petit concurrent qui vient remuer ce petit monde avec des idées nouvelles et un nouveau "plaisir" de programmation.

Et comment choisir entre Python et Ruby quand on est étranger aux deux ? En testant les deux !
J'ai commencé par Python en achetant un livre pour assimiler les bases du langage.
Après avoir programmé en Python quelques semaines, je me suis rendu compte que contrairement à tout ce qui se dit, je n'ai trouvé en aucun cas Python plus "humain" et plus plaisant à utiliser que C++... Et pourtant je ne suis pas un admirateur de C++ loin de là. Mais j'ai l'impression que cette plaisance à programmer peut être encore améliorée et que la syntaxe de Python n'est pas si "agréable" que ça...

Frustré, je me suis lancé avec un sentiment d'insatisfaction dans Ruby. Et là, grande surprise ! Plus j'apprenais les subtilités du langage, plus je prenais plaisir à programmer avec. Et des subtilités, il y en à tellement, expliquées en détails sur tant d'autres sites, qu'elles n'ont pas leur place ici.

Une chose importante à préciser est que je ne testais pas Python et Ruby seuls mais avec leurs frameworks Qt 4.7 respectifs PyQt4 et QtRuby. Mais la différence n'est pas vraiment entre ces frameworks, ceux-ci étant tous deux très bien portés, ce qui revient donc à comparer les langages en eux-mêmes.

Un des reproches que je fais à Python est sa syntaxe qui n'est pas si "naturelle" que ça et surtout aussi, voir plus contraignante, que celle des langages qu'il est censé "humaniser".
À l'opposé, Ruby m'a vraiment semblé plus naturel et plaisant à utiliser. Ce qui m'a peut-être le plus plu est la Ruby Way, une façon très Rubiesque de programmer et qui "dicte" des façons de faire.
Cependant contrairement à ce qu'on pourrait penser, ça ne bloque pas l'utilisateur dans une seule façon "juste" mais permet au contraire différentes approches et différentes façons de résoudre des problèmes de programmation.

L'humanisation de Ruby a vraiment été portée jusqu'à un degré extrême.
Le fait que tout soit objet aide bien dans beaucoup de cas.

Regardons ce petit bout de code d'exemple, inspiré du site officiel de Ruby :

say = "I like Ruby"
puts say
# Outputs "I like Ruby"

say['like'] = "*love*"
puts say.upcase
# Outputs "I *LOVE* RUBY"

5.times { puts say }
# Outputs "I *love* Ruby" five times

Dans ce code, on définit ce qui serait un String ou un char* dans d'autres langages (ou un QString en Qt, déjà mieux) mais sans déclarer son type.
En effet les variables peuvent changer dynamiquement de type et n'ont pas a être instanciées dans un type particulier (comme en PHP par exemple).
Dans notre cas, say est donc un objet de la classe String.
Et il se trouve qu'on peut en changer simplement son contenu textuel, par exemple le mot "like" pas un autre (ici par *love*) en appelant say['like'] = "*love*" !
Impensable en C++...
Et on peut aussi changer la casse en appelant la méthode "upcase".

La dernière ligne de code non commentée devrait en surprendre plus d'un.
Tout étant objet en Ruby, le chiffre "5" est donc aussi un objet, en l’occurrence un objet de la classe Integer qui possède une méthode "times()" qui itère 5 fois le code dans le bloc qui le suit.
Ce genre de raccourcit et de logique de "bloc" est la force même de Ruby.

Ruby est gratuit, disponible sous toutes les plateformes et facile à installer et utiliser, donc ceux qui hésitent encore, n'hésitez plus et foncez dans l'adoption de Ruby : Ruby Language Official Website.