avril
2008
Avec la même approche que pour le HelloWorld du billet précédent, nous allons voir un GroovyBean. Un Groovy bean, c’est un java Bean a la mode groovy.
Prenons par exemple une classe Adresse pour java : Elle contient deux attributs, leurs geters et seters ainsi qu’une méthode de formatage getAdresseComplete et un petit main pour afficher les données.
Et bien elle compile directement dans groovy mais nous allons bien sur voir comment elle peut être transformée pour une meilleure lisibilité.
Tout d’abord et comme la dernière fois : les ; sont inutiles, et en groovy, les classes et méthodes sont par défaut public. On peut donc se passer de ces artefacts inutiles dans le code.
Vous avez peut-être vu que pour java7, il est proposé un système déclaration des propriétés, en groovy, c’est déjà la. Un attribut sans aucun modificateur est considéré comme une propriété. Vous pouvez donc vous passer des geters et seters. Par contre le byte code généré comporte ces méthodes, donc si vous utilisez ce bean via java, vous pourrez bien utiliser les méthodes getVille() et autres.
Dans groovy, dernier statement d’une méthode est automatiquement retourné, on peut donc se passer du return de la méthode getAdresseComplete(). On en profite pour utiliser les possibilités de concaténation de variables des String groovy (GString de leur petit nom).
Et comme On l’a vu, il n’est pas obligatoire de tout mettre dans une classe, ni de typer les variables. On utilise le raccourci println pour System.out.prinln() histoire d’alleger au maximum.
Au final, on a du code très simple, très expressif, et facile a lire pour un habitué de java. C’est je crois le gros point fort de groovy, très expressif, tout en étant facile a appréhender.
Par contre, je reste partagé sur le fait de typer ou non les variables, et je pense que ça dépends du type de code que l’on produit. Si c’est plutôt du script, def c’est plutôt pratique. Sur un projet plus gros, le typage apporte quand même une sécurité a la compilation appréciable.
Et bien sur, vous disposez avec ce bean de Java et de toute ses api, comme par exemple JPA. Voila par exemple ce que donne ce bean rendu persistant via JPA.
Et pour info, si on déclare une property « final »
seul le geter est généré. on est donc très proche du readonly.
final String ville = « paris »
on aura le geter, mais pas le seter
Sauf erreur, pour les propriétés read-only il suffit de mettre le setter en private ou protected:
Integer id
private void setId(Integer id) {…}
@Uther: pour le def, va falloir s’y habituer de toute urgence: Scala, Groovy, Ruby, etc. tous reposent sur ce mot magique
alors d’abord, je ne suis pas encore un pro, donc ce que je dis est soumis a caution
pour les propriétés : non, elles sont automatiquement read/write. si tu veux faire une read only, il faudra faire les geter et mettre la variable en private.
une propriété boolean « valid » génère un « setValid » et un « isValid »
je reviendrai sur le def plus en détail par la suite (je dois revenir sur un paquet de trucs )
Merci pour ton article très intéressant. La syntaxe Groovy m’a l’air bonne pour palier à l’aspect trop verbeux de java. Certains aspects me plaisent beaucoup (propriétés, classes non obligatoire, ; facultatifs) mais d’autres me font peur(le def notamment) .
Sur ton exemple j’aurais quelques questions:
– Peut on faire des propriétés read/write only.
– Un propriété booléan « valid » crée il, une fonction « getValid », « isValid » ou les deux?
– Si une variable sans modificateur de visibilité est une propriété, est-il possible de faire des variable « package public »?
J’aimerais aussi plus de détail sur comment est géré le def. KLe reste peux s’aperenter a du sucre syntaxique, mais là ça me parait une sacré différence par rapport à JAVA qui est fortement typé.
Ha ! Je serais intéressé par ça Lunatix :p
alors dans une jsp, je ne sais pas. dans une servlet oui.
voir http://groovy.codehaus.org/Groovlets et http://groovy.codehaus.org/api/groovy/servlet/GroovyServlet.html
pour les performances, j’y reviendrai plus tard je pense.
Bien qu’après ceci : http://www.codecommit.com/blog/java/groovys-performance-is-not-subjective j’ai été quelque peux refroidis, grâce à tes articles Groovy m’a l’air assez intéressant. La syntaxe me fais penser à du Php, est-il possible d’utiliser Groovy dans une Jsp ou via une GroovyServlet ?