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 queint[] 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 deFoo 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 à
==
etequals()
. En Ruby, vous utiliserez==
pour tester une équivalence logique (ce test est réalisé avecequals()
en Java). La méthodeequals?()
, quant à elle, permet de savoir si deux objets n’en sont qu’un (c’est le sens de==
en Java).