Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

OpenSource Exchange : compte-rendu sur Groovy

Groovy

Présentation réalisée par Guillaume Laforge

Qu'est-ce que Groovy ?

Groovy est un langage dynamique fonctionnant sur la machine virtuelle Java (JVM), normalisé par la JSR 241, et sous licence Apache.
Développé à l'origine par G2One, il sera désormais maintenu par SpringSource (voir : SpringSource acquiert G2One), ce qui devrait lui apporter :

  • une meilleure visibilité et davantage de crédibilité
  • une meilleure intégration aux technologies Spring : MVC, Webflow...
  • un outillage amélioré sous Eclipse, SpringSource possédant une équipe spécialisée dans le domaine
  • une maintenance active de la version "OSGi-fiée", pour utilisation dans Spring DM Server

La syntaxe de Groovy dérive de celle de Java 5 (tout code Java5 peut donc théoriquement être exécuté sous Groovy sans modification), et propose de nombreuses améliorations comme une syntaxe allégée, les closures, la surcharge des opérateurs, la gestion du XML et des expressions rationnelles... Les scripts groovy peuvent être interprétés dynamiquement ou compilés sous forme de bytecode java (.class), ce qui autorise leur intégration transparente dans les projets Java standards. Ils peuvent également être appelés via le Bean Scripting Framework (BSF), ou grâce aux nouveaux packages javax.script.* de Java6.

Groovy en action

Afin de nous présenter quelques fonctionnalités intéressantes du langage, Guillaume est parti d'un "Hello World" écrit en Java, puis a progressivement "groovyfié" le code :

  • élimination des parenthèses et des points-virgules
  • suppression des indicateurs "public" : tout est public par défaut en Groovy
  • suppression des getters et setters : ils sont générés automatiquement
  • utilisation des "G-Strings" au lieu de la concaténation de chaînes ("Hello "+name devient "Hello ${name}")
  • extraction du code de la méthode main() directement au niveau du script, c'est-à-dire à côté de la classe HelloWorld

Au final, le script Groovy faisait environ 20% du code Java initial. Pas mal comme gain de productivité, bien que les IDE modernes permettent de générer une bonne partie du code Java.

D'autres points plus précis ont été également mentionnés :

  • Parcours de données XML avec une simple "syntaxe à points" et des closures
  • Un builder pour produire des interfaces Swing facilement (projet Griffon)
  • Un bridge COM/ActiveX vers Java, permettant d'interagir avec les applications sous Windows (Outlook, Excel...)
  • La facilité pour écrire des mini-langages spécialisés (DSL).

Roadmap

Depuis fin 2007, la version 1.5 est disponible. Elle apporte le support des nouvelles fonctionnalités de Java5+ : annotations, enums, etc.
La version 1.6 est prévue pour bientôt, et devrait proposer les assignations multiples ((a,b) = (5,8)), la manipulation directe de l'arbre syntaxique, et bien sûr diverses améliorations au niveau des performances.

Conclusion

J'avais déjà vu cette présentation à une soirée du Paris JUG, qui donne envie d'y regarder de plus près. Surtout que, depuis qu'il est soutenu par SpringSource, on risque de retrouver du Groovy à tous les étages de Spring...
J'aurais tout de même apprécié un exemple concret de création de DSL, puisque c'est à mon avis l'utilisation la plus intéressante du langage. Peut-être à l'occasion d'une autre conférence...

GuillaumeLaforge.jpg

Note : les slides de la présentation sont disponibles sur Slideshare.


Commentaires

1. Le mercredi 19 novembre 2008, 16:23 par HollyDays

«Au final, le script Groovy faisait environ 20% du code Java initial. Pas mal comme gain de productivité, bien que les IDE modernes permettent de générer une bonne partie du code Java.»

Le problème principal du grand nombre de lignes de code n'est pas qu'il faut les taper, c'est qu'il faut les maintenir. Qu'elles soient générées ou tapées à la main, cela ne change rien.

Donc qu'un langage offre des mécanismes pour réduire significativement le nombre de lignes de code à maintenir sans perte d'expressivité et de lisibilité est un très gros plus.

C'est d'ailleurs pour cela que je plaide depuis un certain temps pour l'intégration dans Java de la notion de "propriété de JavaBean", qui éliminerait 95 à 99 % des getters et setters (par exemple grâce à une annotation @Property ou @ReadProperty sur l'attribut), et réduirait énormément le code des classes JavaBean, tout en permettant au développeur de se concentrer, en période de développement comme de maintenance, sur le code qui a vraiment une valeur ajoutée.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.