De Java à Ruby

Java est un langage mature. Testé et éprouvé. Et rapide, avec ça (malgré les racontars). D’un autre coté, il est assez verbeux. Passer Java à Ruby, c’est vraiment voir fondre sa quantité de code. Ruby peut également permettre au développeur Java une mise en place de prototypes plus rapide.

Similarités

Tout comme en Java, en Ruby…

  • la mémoire est l’affaire d’un garbage collector ;
  • les objets sont fortement typés ;
  • il y a des méthodes privées, publiques, protégées ;
  • il y a des outils de documentation fournis par défaut (ri, RDoc), qui ont un look ‘n feel assez proche de javadoc.

Différences

Contrairement à Java, en Ruby…

  • il n’y a pas besoin de compiler son code, simplement de l’exécuter directement ;
  • des toolkits graphiques différents sont disponibles. Voir par exemple WxRuby, FXRuby, Ruby-GNOME2, Qt, ou la bibliothèque Tk fournie d’office.
  • utilisation du mot-clé end pour clôturer la définition des classes, par exemple, en lieu et place des accolades englobantes ;
  • require au lieu du mot-clé import ;
  • toutes les variables de membre sont privées ; l’accès à ces « attributs » se fait via des méthodes ;
  • les parenthèses dans les appels de méthodes sont bien souvent optionnelles ;
  • tout est un objet, y compris les nombres comme 2 et 3.14159 ;
  • pas de vérification de typage statique ;
  • les noms de variables ne sont que des étiquettes sans type ;
  • pas de déclarations de type. Il suffit d’assigner un nom à une nouvelle variable lorsque le besoin s’en fait sentir (par exemple, a = [1,2,3] plutôt que int[] a = {1,2,3};) ;
  • pas de cast. Appelez simplement les méthodes. Vos tests unitaires devraient vous dire très vite, avant d’exécuter le code, si une exception devrait survenir suite à une erreur ;
  • foo = Foo.new("hi") au lieu de Foo foo = new Foo("hi)
  • le constructeur s’appelle toujours initialize, et non pas le nom de la classe concernée ;
  • l’héritage multiple et les interfaces sont géréés par le mécanisme des mixins ;
  • YAML est souvent préféré à XML dans la communauté ;
  • nil au lieu de @null ;
  • Ruby attribue des comportements contraire à == et equals(). En Ruby, vous utiliserez == pour tester une équivalence logique (ce test est réalisé avec equals() en Java). La méthode equals?(), quant à elle, permet de savoir si deux objets n’en sont qu’un (c’est le sens de == en Java).