Accueil > Forums et Salons, Java EE, Outillage > Java 8 in Anger – DevoxxFR

Java 8 in Anger – DevoxxFR

Java 8 in Anger est un talk qui a été donné lors du Devoxx France 2015 pour présenter les nouveautés de Java 8 avec du live coding et je ne sais pas si vous partagez mon enthousiasme à assister à du live coding mais qu’est-ce que c’est bon !
Lors de l’édition 2015 du Devoxx France, les talks où le live coding était mis en avant ne sont pas légion. Et je trouve que, personnellement, c’est dommage car on retrouve dans le live coding l’un des piliers de ce qu’est le Devoxx : une conférence pour les développeurs et développeuses. Avec le « live build » du talk « Java 8 in Anger », je n’ai pas été déçu !

Java 8 in Anger - Trisha Gee au Devoxx France 2015

Java 8 in Anger – Trisha Gee au Devoxx France 2015

Ce talk porte sur le développement live d’une application de type « dashboard » présentant des tweets. On est sur une application concrète donc et pas un simple « Hello World! » avec une surcouche d’expression lambda. D’ailleurs, elle l’écrit très bien elle-même : « to move beyond slide-sized examples of streams and lambdas ». C’est un talk qui a été très apprécié avec des applaudissements nourris et mérités ainsi que de très bons retours sur twitter (#dvxfrtop) et sur différents blogs spécialisés.

En quelques mots, l’application à développer doit traiter un grand nombre de tweets, les interpréter et les présenter dans un dashboard. Ce Dashboard est réalisé grâce à l’API JavaFX  introduite avec Java 8 et qui remplace officiellement le défunt Swing. Dans notre cas, nous allons seulement nous focaliser sur la partie où elle développe le service pour la vue présentant les utilisateurs qui ont le plus grand nombre de tweets. L’idée est de vous illustrer ce qu’elle a réalisé en live et qu’on ne retrouve pas dans son support de présentation disponible sur slideshare : http://www.slideshare.net/trishagee/java-8-in-anger-building-a

Illustration de l’application – la partie droite est celle qui nous intéresse :

Twitter dashboard

La force de sa présentation réside dans son discours fluide, très rythmé, de l’interaction avec le public et, pour ma part, du live code. Mais que demande le peuple ? Elle nous sollicite en nous interpellant : « What do we need ? We need a service to handle tweet messages ». Et on démarre l’implémentation que la plupart des développeurs pourraient produire. Mais là où Trisha réussit son tour de force, c’est de refondre le code pour y apporter les nouveautés de Java 8 et ce, tout au long de la session (au bas mot, une dizaine de refactoring de fonctions). Illustrons-le avec un exemple.

L’application comprend un listener qui traite les tweets et les ajoute en mémoire à une map de type <Tweet, TwitterUser>. Ce listener comprend une méthode « onMessage » :

public void onMessage(String tweet) {
  mapTwitterUser.computeIfAbsent(tweet, new Function<String, TwitterUser>() {
    @Override
    public Tweeter apply(String s) {
      return new TwitterUser(s);
    }
  });
}

Ici, on utilise la nouvelle fonction de Java 8 plutôt sympathique « computeIfAbsent » qui permet comme son nom l’indique de vérifier si l’entrée <tweet, valeur> existe et le cas échéant de calculer sa valeur et de l’ajouter dans la map. Mais ce code peut aussi être condensé en ajoutant la référence à la méthode « new » de la classe Tweeter :

public void onMessage(String tweet) {
  mapTwitterUser.computeIfAbsent(tweet, TwitterUser::new);
}

Pas mal, vous ne trouvez pas ? Et bien, ce n’est pas fini (toute référence à une publicité pour un opérateur de téléphonie mobile est fortuite).
Trisha utilise IntelliJ IDEA qui apporte des facilités sur le refactoring en Java 8. IntelliJ permet en cliquant sur le mot « Function » de modifier le code existant et d’ajouter la référence nécessaire.
Pour les personnes, dont je fais partie, qui ne sont pas familières avec les nouveautés de Java 8, je trouve que c’est un apport considérable dans l’apprentissage au quotidien de ce qu’apporte Java 8. On peut continuer de coder tel que l’on fait habituellement et, avec les tooltips qu’offre IntelliJ, on peut choisir de bénéficier de l’aide de refactoring. Bien sûr, cela nécessite d’utiliser l’IDE IntelliJ et l’article n’a pas vocation à faire la promotion de cet outil mais, dans un but pédagogique, je trouve que cela mérite de l’essayer/adopter.
Nous voyons donc que l’application stocke dans des objets de type collection un grand nombre de données et que sur ces données, nous allons avoir besoin de réaliser un traitement qui, nous le devinons déjà, est fastidieux à développer. Or, Java 8 apporte un grand nombre de nouveautés sur le traitement des valeurs issues d’une collection. Revenons sur notre map <Tweet, TwitterUser> et voyons comment déterminer cette fameuse liste d’utilisateurs avec le plus grand nombre de tweets :

// notre collection de top twitter users :
List<TwitterUser> topTwitterUsers = 
// récupérer tous les TwitterUser 
    mapTwitterUser.values() 
// transformer la collection en stream
                  .stream()
// trier les valeurs via un comparateur sur le nombre de tweets
                  .sorted(comparing(TwitterUser::getAllTweets))
// prendre uniquement les 5 premiers
                  .limit(5)
// collecter les valeurs dans une collection via la classe Collectors
                   .collect(Collectors.toList());

Et rendez-vous compte que ce n’est qu’un seul des nombreux refactoring que Trisha a réalisés pendant les 45 minutes de son talk. Au fur et à mesure de ces minutes, j’ai senti un engouement grandir sur la capacité à rendre le code plus compact, plus lisible. Et avec la facilité qu’apporte l’IDE IntelliJ, il est très aisé d’appliquer les nouveautés de Java 8 sur du code existant, de l’apprendre et du coup, de l’adopter. C’est ce que j’aime dans ces présentations de type live coding : voir une personne pratiquer ce qu’un développeur fait tous les jours avec un nouvel outil ou une nouvelle façon de coder et de le partager aux autres. Trisha maîtrise l’exercice au point que cela remotive, suscite l’envie chez le développeur et incite fortement à essayer le live coding.

Si vous souhaitez en savoir plus sur la présentation de Trisha Gee et sur les nouvelles possibilités offertes par Java 8, je vous invite à vous rendre sur son site : http://trishagee.github.io/presentation/java8_in_anger/. Vous pouvez y retrouver une session de sa présentation au QCON de Londres, sa présentation ainsi qu’un lien vers son github pour les sources de l’application.

  1. Pas encore de commentaire
  1. Pas encore de trackbacks


+ sept = 12