mardi 12 avril 2011

Du Play et du Scala!

Je suis entrain de réécrire entièrement en Scala mon application de démo pour Play framework!
Le code de l'application est disponible ici : https://github.com/loicdescotte/vote4music-scala
Une occasion de comparer les langages, puisque la version Java est disponible là : https://github.com/loicdescotte/vote4music

Personnellement je trouve l'API Scala de Play plutôt bien pensée, elle colle même peut être encore plus à l'esprit Play que la version Java. On gagne en concision et surtout en expressivité du code grâce à l'approche fonctionnelle.

Le code de l'application n'est pas encore parfait, il reste quelques bugs et quelques TODO (les API Json et XML ne sont par exemple pas encore fonctionnelles). Mais la plupart des fonctionnalités sont là.

Cette version Scala fera d'ailleurs l'objet d'un chapitre dans le livre Play.rules dont je vous ai parlé dans le post précédent.

6 commentaires:

Romain a dit…

Je suis également en train de faire une migration d'un projet Java vers Scala (Play! vers Play! aussi). Pouvoir migrer et ainsi comparer le code avant/après permet vraiment de voir le gain qu'apporte Scala par rapport à Java. Je ne sais pas si c'est ce que tu as remarqué mais dans mon code c'était assez flagrant...

J'aimerais aussi connaître les étapes que tu as suivies pour ta migration et la durée approximative de celle-ci.

Et merci pour le code ;-)

Loïc Descotte a dit…

Salut Romain,
moi aussi je suis assez bluffé par le gain dans le code, surtout au niveau de la lisibilité.
Pour les étapes, j'ai commencé par reprendre mon modèle (avec le trait QueryOn) puis les contrôleurs, en réécrivant les méthodes une par une.

Pour le temps passé dessus, dur à dire, j'ai fait pas mal de retours en arrière avant d'avoir un code qui me convient, et il n'y a pas encore toutes les fonctionnalités. Et puis je fais ça le soir où des que j'ai 10 minutes de libre, un peu en continue!

Pour la partie authentification j'ai suivi un exemple de la doc play-scala que j'ai adapté, plutôt que reprendre le module Secure. ça permet d'avoir une application intéressante des Traits dans le code.

Loïc Descotte a dit…

Sur des bouts de code comme :

albums.sortBy(_.nbVotes).reverse

ou pour lister des entiers dans un intervalle :

val first = Albums.firstAlbumYear
val last = Albums.lastAlbumYear
years = first.to(last).toList

On voit bien le gain par rapport à Java où on aurait du faire des boucles

Romain a dit…

Idem pour Secure, en plus cela permet de bien prendre en main les Traits et voir ce que l'on peut faire avec.
Pour les bouts de code, j'avais déjà des librairies (comme Guava) qui me simplifiaient le code et amélioraient la lisibilité. Mais Scala, et plus globalement les langages fonctionnels, apporte un réel gain et cela se voit dans tes exemples :-)

Loïc Descotte a dit…

C'est vrai, j'utilisais lambdaj dans la version Java mais pouvoir faire ce genre de choses nativement c'est vraiment cool! Et en plus sans faire baisser les perfs contrairement à lambdaj

Sam BESSALAH a dit…

Très bonne idée. looking forward to it. fork/pull request ahead.

Enregistrer un commentaire