Recherche

Coder's IO

Tag

Java

Java 8 : Les lambdas par l’exemple

 

Java 8 est sorti ! Ce n'est plus une grande nouvelle… 
Maintenant, plus d'excuses pour ne pas utiliser cette nouvelle version du langage.
Comme nous avons pu le voir au travers de précédents articles. pas mal de nouveautés sont arrivées avec ce nouvel opus.

Parmi ces nouveautés : les expressions lambdas
Cette nouvelle fonctionnalité permet de déclarer en ligne des fonctions. Il était possible de faire quelque chose de similaire auparavant au moyen d'une classe anonyme. L'inconvénient était le nombre de lignes qu'il fallait écrire avant de réellement implémenter le code métier. Avec les lambdas, une ligne suffit..

Pour bien comprendre le mécanisme et la valeur apportée par ce mécanisme (inspiré en partie du monde de la programmation  fonctionnelle), je vous propose l'article attaché à ce post qui décrit 10 exemples mettant en œuvre les expressions lambdas.

Les exemples que vous pourrez découvrir sont : 

– Implémentation d'un thead
– Implémentation d'un listener d'évènement
– Parcourir une liste
– Utilisation de l'interface Predicate de manière fonctionnelle
– Créer une combinaison de Predicate
– Implémentation d'un Map Reduce
– Création d'une liste de String via un filtre
– Appliquer une fonction sur chaque élément d'une liste
– Création d'un sous-liste
– Calcule du Max, Min, moyenne et somme sur une liste d'élément.

Pour les personnes qui découvrent cette syntaxe, cela peut être déroutant voir même pas très intuitif. 
Si vous prenez le temps de bien comprendre, cela vous ouvrira de nouvelles perspectives.

Bonne lecture !

#java #lambda #version8

Easy Eclipse for Java

 

Je viens de lire une news vraiment intéressante concernant une initiative lancée par +Pascal Rapicault.

Le principe est de proposer une version de l'IDE Eclipse exclusivement dédiée à Java. Jusque là, rien de nouveau. La nouveauté est que cette version sera sous licence payante. 

L'objectif de cette licence n'est pas d'enrichir l'éditeur de la version mais de proposer une version stable fournissant une meilleure expérience utilisateur.

Ce modèle économique rappelle clairement l'IDE IntelliJ qui connaît un succès grandissant dans la communauté des développeurs sous la JVM.

La première version de EasyEclipse se focalisera sur les fonctionnalités suivantes : 

-Le support de Java 8,
-Maven et Ant,
-Git, SVN, CVS,
-XML, HTML, CSS.

L'idée est que ces fonctionnalités soient natives, directement dans la distribution.

Les autres principales fonctionnalités seront de fournir, entre autres, une launch bar, une épuration des menus contextuels, un enrichissement des templates de code, etc…

Comme dit précédemment, l'objectif de EasyEclipse est de devenir un outil exigeant en terme de qualité. Pour cela, l'ajout de fonctionnalités n'est pas suffisant pour atteindre cette excellence. Pour atteindre ce niveau d'exigence, l'équipe va se focaliser sur les problématiques de performance et de stabilité.

La première version intégrant toutes les fonctionnalités décrites dans le lien attaché au post est prévue pour décembre 2014.

Actuellement, le projet est exposé sur kickstarter. Vous trouverez l'ensemble des informations sur le projet en suivant le lien attaché au post. Ainsi que la manière d'y contribuer.

Vous trouverez également en suivant ce lien, un article de +Jérémie Bresson sur ce nouvel outil :
http://blog.developpez.com/jmini/p12512/eclipse/easyeclipse-ide-java-payant

Bonne lecture !

#java #easyEclipse #eclipse

Java2Scala Cheatsheet

 

L'écosystème de Java s'est considérablement ouvert ces dernières années avec tous les langages créés pour la JVM. 
Personnellement, un a retenu mon attention : Scala. 

Sans rentrer dans le détail du pourquoi celui-là plutôt qu'un autre, je me suis rendu compte de la difficulté d'aborder un autre langage mettant en place une nouvelle syntaxe et de nouveaux concepts. 
Pour ma part, le démarrage a été assez rude, j'ai commencé à coder en Scala en faisant la formation sur Coursera (partie 1).

Ce qui est difficile au départ, c'est de retrouver ses points de repère dans le langage. 
Même si le fait de faire des liens, entre notre langage préféré et le nouveau langage abordé n'est pas toujours une bonne idée ; cela permet de monter rapidement en compétence sur notre cible.

Pour cela, je vous propose un document du type cheatsheet décrivant les équivalences entre les deux langages.
Les points abordés permettent de vraiment prendre en main la nouvelle syntaxe très rapidement. 

Naturellement, une fois ce cap passé, il faudra couper les liens de manière plus profonde avec notre de zone de confort et se plonger la tête la première dans les concepts du nouveau langage.

Bonne lecture !

#java #scala #cheatsheet #migration

JSONassert

 

A l'heure du déploiement massif d'API REST et de l'utilisation intensive du format JSON, il est très utile de pouvoir tester de manière simple mais efficace les différents flux que nous mettons à disposition.

Malgré la simplicité du format Json, la mise en place de test unitaire est toujours un peu fastidieuse sur ce format.
En effet, la représentation du flux est sous forme de chaîne de caractères. Comparer deux flux strictement identiques cela ne pose aucun problème. 
Par contre deux flux identiques sur le contenu mais dans un ordre différent cela se complique. 
Pour traiter ce cas, il va falloir parcourir chacun des éléments et ensuite faire des comparaisons un à un afin de vérifier que tous les éléments d'un flux sont bien présents dans le second. Je vous laisse imaginer le code à écrire et surtout à relire ultérieurement.

C'est précisément là que la librairie JSONassert intervient.
Cet outil permettra de faire des comparaisons de flux Json au niveau de la structure mais aussi des données.

L'exemple présenté sur le site de la librairie est assez éloquent : 

JSONObject data = getRESTData("/friends/367.json");
String expected = "{friends:[{id:123,name:\"Corby Page\"},{id:456,name:\"Carter Page\"}]}";
JSONAssert.assertEquals(expected, data, false);

La librairie propose deux types de vérification : une vérification stricte qui impose que les flux soient strictement identiques et l'autre qui tolérera que tous les champs résultats ne soient pas dans les champs attendus (très pratique pour vérifier quelques champs importants, sans vérifier tout le contenu du flux JSON). Dans tous les cas, l'ordre des champs n'a pas d'importance. Le deuxième mode est recommandé.

Actuellement, la librairie supporte comme framework de test  _JUnit_.

Comme toute bonne librairie, un quick start est proposé afin de rapidement prendre en main l'outil. Vous trouverez aussi un CookBook également très utile pour répondre aux cas classiques.

JSONassert est disponible sur les repos traditionnels Maven.

Bons tests !

#java #json #test

Google Style

 

Les développeurs de chez Google ont mis en ligne un document décrivant les règles (internes) standards de coding Java.

Les règles énoncées dans ce document concernent les aspects esthétiques de formatage du code, mais pas seulement. On en trouve également sur des conventions de codage, de nommage, de structure de fichier source, etc…
Le document se concentre principalement sur des règles universelles simples et rapides à mettre en oeuvre.

Les principaux points abordés sont regroupés selon 6 chapitres : 

– Les fichiers sources de bases
– La structure des fichiers sources
– Le formatage du code
– Les conventions de nomage
– Les bonnes pratiques de coding
– La javadoc.

La première phrase énoncée dans le document montre bien la rigueur des développements réalisés chez Google : 

A Java source file is described as being in Google Style if and only if it adheres to the rules herein

Même si suivre à la lettre toutes ces règles peut paraitre utopique, il peut être intéressant de s'en inspirer et de piocher celle ayant du sens pour son contexte de projet.

Une lecture assidue sera toujours bénéfique.

Bonne lecture!

#java #regle #coding #google

Un peu d’histoire

 

Au travers de l'article attaché à ce post, vous retrouverez l'ensemble des dates clefs qui constitue l'histoire du langage Java.

Depuis le green project en 1991 à aujourd'hui, l'auteur décrit l'histoire de Java.

Pour certains cela rappelera des souvenirs, pour d'autres ils apprendront comment est né le langage.

Si vous constatiez des erreurs ou si vous aviez des précisions à apporter, n'hésiter pas à contacter l'auteur du post.

Bonne lecture!

#java #histoire #oak

Plugin Jenkins pour Intellij

Sur mon projet actuel, nous utilisons classiquement Jenkins.
Nous avons mis en place du continuous delivery. Pour cela, nous avons un certain nombre de builds configurés. Chacun de ces builds constitue un pipeline.

A chaque commit, nous avons un oeil sur les écrans de monitoring proposés par Jenkins.
La conséquence est qu'il faut switcher régulièrement entre notre IDE et le navigateur. Même si cette action n'est pas d'un coût énorme, elle nous fait changer de contexte régulièrement.

Je me suis demandé s'il n'y avait pas un moyen d'intégrer l'outil directement dans l'IDE.
Naturellement, je me doutais bien qu'il existait un plugin permettant cette intégration.

J'ai donc trouvé un plugin vraiment intéressant.
Il a été développé par +David Boissier.
Il est compatible à partir de la version 11 d'IDEA.
Le projet n'est pas encore publié sous une version majeure, néanmoins la version proposée est très stable.

Le plugin permet d'afficher dans un espace dédié l'ensemble des builds disponibles sur Jenkins. On retrouve la traditionnelle pastille d'état ainsi que la météo du build.
Pour chaque job, il est possible de cliquer dessus pour ouvrir la page web correspondante.

Evidemment, lorsqu'un build est en train de tourner, l'interface graphique l'affiche en suffixant le build concerné par (Running)

Bien que les builds soient déclenchés par un commit, il est possible de lancer un build spécifique.

Il est également possible de filtrer sur le nom des builds selon une liste déroulante.
Actuellement, je trouve qu'il manque une petite fonctionnalité qui permettrait de clarifier un peu plus la vue lorsque le projet contient beaucoup de builds différents. Cette fonctionnalité serait la possibilité de filtrer l'affichage à l'aide d'une expression régulière.

L'installation et la configuration sont vraiment simples et rapides : efficace.

D'autres fonctionnalités sont disponibles (je n'ai pas pu encore les tester).
La documentation du projet est assez claire et permet une prise en main rapide.

Toutes les infos disponibles dans le lien attaché au post.

#java #plugin #idea #jenkins 

Scalex : …doc une nouvelle approche

 

La documentation est une ressource précieuse pour comprendre et appréhender une librairie, une api, ou un projet. 
Il existe différents formats de documentation adaptés à différents besoins. Pour le langage Java, la ressource principale est la Javadoc

Celle-ci est générée directement à partir du code. Elle se base sur des commentaires et annotations particulières et adopte une template spécial. 

Ce template n'a quasiment pas évolué depuis sa création. La manière de naviguer est toujours la même. récemment, la CSS a évolué pour donner un coup de jeune (et aussi marquer le passage de Sun à Oracle).

J'évoquais précédemment que la navigation au sein de la documentation n'a pas évolué. Après un certain temps d'utilisation on arrive à retrouver (ou découvrir) les informations cherchées. Néanmoins, le côté très statique implique de bien connaitre sa structure et ne permet pas d'accéder rapidement à une information inconnue. 

Par exemple, si un collègue vous indique le nom d'une méthode d'une classe répondant à la problématique à laquelle vous êtes confronté depuis quelques semaines . S'il ne vous précise pas les informations sur le package ou le nom de la classe, il va falloir chercher et tâtonner (exemple tiré un peu par les cheveux 🙂 ).

Les nouveautés arrivent avec les nouveaux langages tournant sur la JVM. Par exemple le langage Scala (comme par hasard…) propose des fonctionnalités intéressantes et pratiques au sein de sa documentation (scaladoc). En effet, la scaladoc met à disposition deux moteurs de recherche. 
le premier permet de rechercher dans les types (soit en tapant le nom du type, ou en sélectionnant la première lettre du type recherché).
Le deuxième permet de faire une recherche directement au sein d'un type sur les fonctions qui le compose.

Une nouvelle approche est mise en place par le projet 
nommé Scalex. Ce projet propose de manipuler la documentation au travers d'une recherche fulltext. Cette approche permet d'être (selon moi) beaucoup plus efficace dans l'utilisation de la documentation sous-jacente.
Pour l'instant, le projet permet d'accéder à deux indexes de documentation : 

Scala 2.9.1-1
Scalaz 6.0.4

La recherche se fait à partir de l'expression de mots ou alors à l'aide d'un pseudo langage permettant d'affiner sa recherche.

L'outil propose plusieurs moyens pour l'utiliser (ou s'interfacer). Le service est accessible via : 
-La ligne de commande
-IRC
-Web (javascript)
-XMPP
-SBT

Scalex s'est inspiré de Hoogle, le moteur utilisé pour Haskell.

Vous trouverez l'accès au moteur de recherche ainsi qu'à des détails sur le pseudo-langage en regardant le lien attaché à ce post.

#java #documentation #javadoc #scalex.

Java vs Scala : Question de performance

 

Java et Scala sont souvent mis en concurrence sur un tas de sujets.
On compare leur syntaxe, leurs paradigmes et aussi leur performance…
Justement parlons de cette course contre la montre qui se joue entre ces deux langages. L'article en lien dans ce poste fait justement un état des lieux concernant cette fameuse question.

L'auteur nous explique que la question posée n'est pas la bonne.
En effet, quel que soit le langage utilisé et tournant sur la JVM, in fine le code exécuté sera du bytecode.

Lors du benchmark mis en œuvre, on constate que Scala est sensiblement plus rapide que Java sur l'implémentation d'un quicksort.
Petite particularité dans ce use case, c'est le style adopté pour l'implémentation en Scala, c'est-à-dire le style impératif.

L'avantage obtenu par Scala est lié à des optimisations (tailrec) mis en place par le compilateur du langage.

En revanche, lorsque l'on adopte un style fonctionnel et plus concis, les performances résultantes deviennent catastrophiques.

Ce petit résumé vous donne un aperçu du propos contenu dans l'article. Je vous laisse lire l'article original pour compléter cette synthèse.

#java #scala #performance #question

Propulsé par WordPress.com.

Retour en haut ↑

Concevoir un site comme celui-ci avec WordPress.com
Commencer