Gwt et Xtend

Jour 2 !

Arnaud Tournier, le 28-01-2015

Développer avec GWT et XTend

Anton Kosyakov et Sven Efftinge

Qu’est-ce qu’XTend ?

L’écosystème Java est fantastique, mais niveau langage c’est trop verbeux : trop de boiler plate !

Trois principes :

  • Intéropérabilité avec Java. Xtend ne veut pas inventer un nouveau langage mais travailler avec Java
  • Ratio Signal / Bruit faible : peu de boiler plate code s’il vous plait !
  • Apporter des concepts puissants qui manquent à Java.

Implémentation

  • Avoir une syntaxe familière,
  • Doit transpiler vers des sources Java LISIBLES. (C’est ce qui permettra d’ailleurs d’utiliser Gwt avec XTend)
  • Utiliser JDK, ne pas rajouter de nouveaux types (quand même ils utilisent Guava ;)).
  • Pas de messing avec les génériques, les types primitifs, les nullable. Xtend possède l’inférence de type.
  • Intégration avec les outils Java (Eclipse et IntelliJ)

Rapport signal/bruit faible

  • Inférence de type. Typé statiquement.
  • Accès aux propriétés (getters et setters)
  • De bons paramètres par défaults (visibilité des classes, packages)
  • Des lambdas sympas.
  • Parenthèses facultatives

Concepts puissants

  • Macros,
  • Extension methods,
  • Switchs améliorés,
  • Template expressions,
  • Surcharge des opérateurs,
  • Dispatch de méthode dynamique.

Démo

Les basique d’Xtend

Voir le site. Les speakers nous montrent comment on part d’un code Java et en enlevant pas mal d’éléments, comment arriver à du code Xtend beaucoup plus concis.

Intégration avec GWT

Implémentation d’une petite appli de Todo List.

Exemple de l’aide que peut apporter Xtend pour rendre du code Java le plus concis possible :

Les deux speakers nous montrent en fait comment ils ont appliqué les possibilités offertes par Xtend au cas particulier de GWT. Ici Xtend leur permet d’économiser une bonne quantité de code-glue dans les domaines suivants:

  • Déclaration des RPC,
  • UiBinder
  • Création de vues de façon impérative (composition de Widgets).

Les pojo de l’application sont écrits avec Xtend, de façon très concise.

Côté RPC, ils ont implémenté un processeur d’annotation avec l’annotation @GwtService. Ceci a pour effet de générer les interfaces Async et Sync.

Une vue est développée avec UiBinder. Ici Xtend est mis à profit pour générer automatiquement le boiler plate pour l’initialisation d’UiBinder. Tout cela simplement avec l’annotation @WithUiBinding.

Ensuite, est décortiquée la composition de Widgets avec XTend. Comme ailleurs, la syntaxe est très concise.

Voilà à titre de comparatif les versions Java :

Et la version Xtend :

Comme vous l’avez constaté, il y a moins de caractères dans la version Xtend.

Le projet Xtend avec les extensions GWT s’appelle AutoGWT. Vous le trouvez à cette adresse : http://???

PHOTO !!!

Conclusion

Xtend est très puissant et s’intègre sans aucun problème avec GWT. Cependant j’émet un doute sur la valeur industrielle qu’il y a à intégrer ces pratiques. En effet maintenir du code avec des développeurs qui potentiellement ne connaissent pas Xtend sera une difficulté notable. Il faudra donc prévoir des formations, et surtout je pense donner un cadre strict à l’utilisation d’Xtend qui en autorisant la manipulation du langage ouvre des portes à des utilisations plus que risquées. Ceci dit, pour un projet de petite envergure, l’utilisation d’un tel outil peut évidemment permettre un gros gain en productivité.

J’avais essayé Xtend il y de cela deux ans justement avec une (petite) application GWT, pour pouvoir écrire des lambdas (Java 8 était annoncé mais pas encore sorti). Mon objectif était évidemment d’accroître ma productivité. Le bilan de cet essai fût le suivant : pour gagner en productivité il me fallait investir dans Xtend, intégrer de nouveaux outils, et prendre le risque d’écrire du code complètement non-standard que potentiellement je n’arriverais pas à relire dans un futur plus ou moins proche. J’ai donc simplement arrêté l’expérience et attendu Java 8 !

Ceci dit, cet outil est très puissant (on croirait coder en C# !). Son intégration avec Eclipse est exemplaire (passage des sources Xtend vers Java et inversement très fluide par exemple), et il a l’air très bien conçu. Pour moi il s’agit donc plus d’un très bel objet de laboratoire plutôt que de la solution des problèmes posés à une équipe de développeurs…


Arnaud Tournier, le 28-01-2015