Cette expression de sucre syntaxique me laisse perplexe. Le fait est qu’améliorer la lisibilité du code est un des objectifs d’Xtend. Tout en conservant tous les concepts de Java, Xtend va en simplifier l’écriture et la lecture.
Essayons d’analyser cet extrait de code…
Les points virgules en fin de ligne sont facultatifs. Avant de faire du Xtend, je ne les avais jamais vraiment considérés comme gênants. Maintenant, je me surprends à écrire du Java dans lequel ils manquent.
Également facultatif : les parenthèses pour les méthodes sans paramètres. C’est bien pratique pour instancier un objet dont le constructeur n’attend pas de paramètres. Il suffit d’écrire new Actor.
Xtend fait de l’inférence de type partout où c’est possible. Au final je peux presque toujours me passer de type lorsque je déclare mes variables avec le mot clé val (pour les variables non mutables, finale en Java) ou le mot clé var (pour les variables classiques de Java). C’est vrai aussi pour le type retourné par une méthode. Pas besoin de le définir, il est déduit du contenu de la fonction.
L’utilisation des getters et setter est simplifié : il est possible d’accéder à la valeur retournée par un getter directement. Typiquement actor.lastName correspond en Java à actor.getLastName(). De même actor.firstName = "Bob" utilisera le setter comme on s’y attend.
En fait cette invocation des méthodes avec l’opérateur égal marche avec toutes les méthodes d’une classe. C’est pour cela que je peux écrire actors.add = actor si actors est une liste de type List et actor un objet de type Actor.
Le mot clé return peut également être omis… La dernière expression évaluée est ainsi retournée. Au début je me disais que ce n’était certainement pas une bonne idée. Et puis je me suis surpris à l’utiliser dans les méthodes très courtes (celles qui retournent juste une valeur).
Je ne suis pas certain que ces différents exemples constituent une liste exhaustive de la simplification de syntaxe qu’apporte Xtend. En écrivant cet article, je me rends compte qu’il ne s’agit que de la surface visible de l’iceberg : je n’ai pas du tout évoqué d’autres aspects que j’adore dans Xtend (Extension Methods, Operator Overloading, With Operator, Template Expressions… Autant d’autres sujets possibles pour ma série d’articles sur Xtend).
De toutes ces possibilités, il y a certainement un certain nombre de bonnes pratiques à définir dans une équipe de développement. Il ne faudrait pas que les possibilités de simplification offerte par le langage aboutissent à l’écriture de code illisible.