Groovy – Le super langage pour Java

Voici un petit article pour vous présenter un langage de haut niveau  qui vous permettra de 'coder' plus vite en Java ^_^
C'est un langage que j'avais à l'époque surveillé et que j'ai testé par curiosité 😉
Voici un outil que je pense très puissant qui va booster votre JAVA.

L'histoire de Groovy

Pour l'historique, Groovy c'est fait connaitre en remportant le titre de meilleur projet d'innovation lors de la conférence JAX 2007 qui a eu lieu en Allemagne.
Il est aujourd'hui dans sa version 1.7.2 et fait partie de la communauté CodeHaus.

Pourquoi Groovy ?

Pour ceux qui se plaignent qu'il y a trop de lignes de code avec Java vont surement être intéressé.
Groovy est une surcouche de Java et donc génère du code Java dans le bytecode (classe compilée).
Il implémente des fonctions supplémentaires aux classes déjà existantes, exemple : String, InputStream, StringBuilder (si java 5), ...
Il permet déjà de faire des 'closures' (prévu dans Java 7 ^_^) et de déclarer des variables non typées comme par exemple en javascript.

La 'puissance' de Groovy réside dans sa syntaxe simplifiée mais aussi des nombreux modules supplémentaires et de 'builders'.
Pour les impatients, plus d'info ici : site officiel

Quelques modules intéressants

Je vais ici vous présenter quelques modules sont vous seront très pratique.

GORM : module ORM de Groovy, qui repose sur Hibernate 3.
GSQL : module pour le SQL.
GroovyWS : module pour réaliser des web services. Il s'appuie sur CXF, un des meilleur(voir le meilleur ^_^) framework pour web services.
GFreeMarker : module pour le support de FreeMarker, moteur de templates open source (site officiel de freemarker)
Grails: projet de la communauté SpringSource très prometteur. C'est un cocktail composé de Groovy et de Spring MVC.

Quelques builders pratiques

XML Builder: permet de simplifier la syntax XML
HTML Builder: permet de simplifier la syntaxe HTML

Exemples de code

Formattage XML

def xmlBuilder = new groovy.xml.MarkupBuilder()
xmlBuilder.ideo {
developper( nom:'NGUYEN', prenom:'Christian')
developper( nom:'KAUFFMANN', prenom:'Thibault')
developper( nom:'DELAYE', prenom:'Claude', role:'Referent Technique', {article( titre : 'Construire des dates exprimées en UTC via Javascript' , sujet : 'javascript')})
}
xmlBuilder.println()

Résultat:

<ideo>
<developper nom='NGUYEN' prenom='Christian' />
<developper nom='KAUFFMANN' prenom='Thibault' />
<developper nom='DELAYE' prenom='Claude' role='Referent Technique'>
<article titre='Construire des dates exprimées en UTC via Javascript' sujet='javascript' />
</developper>
</ideo>


Déclaration d'un tableau

[0,1,2,3,4]

ou alors :
def tableau = [0,1,2,3,4]

Iteration sur tableau


[0,1,2,3,4].each { println "valeur : " + it }

ou alors :

def tableau = [0,1,2,3,4]
for (e in tableau){
println "valeur : " + e
}

Les deux codes ci-dessus vont afficher le même résultat.

Les tableaux sont dynamiquement redimensionnés (comme les List)
Vous pouvez par exemple rajouter le code suivant :

tableau[7]=6
tableau.each{ println "valeur : " + it }
println "longueur du tableau : ${tableau.size()}"

Vous aurez le résultat suivant :

valeur : 0
valeur : 1
valeur : 2
valeur : 3
valeur : 4
valeur : null
valeur : null
valeur : 6
longueur du tableau : 8


Déclaration d'une closure

def disBonjour = { nom,prenom ->
print "Bonjour " + prenom + " " + nom + " !"
}

Ici on déclare une variable disBonjour qui contient la référence a une closure.
La closure possède 2 variables : nom et prenom.
Remarquez qu'on ne déclare pas le typage ^_^


J'espère que cette courte présentation vous donnera envie de découvrir ce langage.
Il me parait très prometteur et il est difficile de présenter l'ensemble du langage dans un seul article.
Egalement à suivre : GRAILS basé sur Groovy et Spring MVC qui permet de générer des applications web à la façon Ruby On Rails.
Je vous invite donc à visiter le site de Groovy et de Grails:
site officiel Groovy
Wiki Groovy
Grails

3 commentaires

  1. Je me demande juste si la terminologie du titre ne pourrait pas être précisée. Groovy a sans doute des mérites propres en tant que langage ; pas besoin de préciser « pour java ».
    Il rentre dans la catégorie des langages tournant sur la JVM et permettant de s’interfacer avec des applications java « traditionnelles », reste à expliciter les avantages de Groovy par rapport à Scala ou Clojure (en tenant compte aussi des difficultés d’apprentissage pour un développeur bare bone java)…

  2. C’est vrai qu’on s’y perd avec tous ces langages capable de générer du bytecode (donc de s’interfacer avec n’importe quelle application Java) et les interpréteurs de langage 100% Java (comme Rhino ou JRuby).

    Ce qui serait idéal, ce serait effectivement de disposer des avantages et inconvénients des uns et des autres en terme de courbe apprentissage, de maintenabilité, d’exploitation et de performance.

    Je trouve qu’il y a une particularité de Groovy qui me manquait depuis le C++ et qui me donne envie de m’y mettre tout de suite : c’est la surcharge des opérateurs.

  3. Je ne connaissais pas Scala ^_^
    Coté syntaxe les deux se ressemble assez. Pour Clojure (survole rapide), je trouve que la syntaxe n’est pas très lisible.

    Pour les avantages, Groovy possède beaucoup de modules intéressants qui encapsule des frameworks et librairies open source assez utilisés(exemple : Hibernate, CXF, Ant, Maven, etc). La documentation est bien faite aussi je trouve. On arrive à s’y mettre assez vite.

    Pour les inconvénients, tous ces langages restent quand même à ‘apprendre’.

    Et enfin, coté édition, les deux possèdent des plugins Eclipse.

    Pour ma part, je me suis interessé à Groovy par hasard en recherchant autre chose ;-).

    Je suis tombé sur Grails(que je découvre aussi ^_^) qui s’appuie sur Groovy et permet de générer un CRUD avec interface graphique et de lancer un serveur test(ici Tomcat) en moins de 10 minutes (voir 5 si on est rapide ^_^).

    Tout ceci pour dire que je cherche un moyen d’augmenter la productivité pour des applications web en java qui souvent trop ‘couteux’ pour les entreprises et Groovy semble être une piste sérieuse ^_^

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.