Recherche

Coder's IO

Tag

Google

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

DevFest à Nantes

 

Le 9 novembre prochain se tiendra le DevFest à Nantes. 
Cette conférence est organisée par le Google Developer Groups (GDG) Nantais.

D’une manière générale, les DevFests sont des conférences qui se tiennent un peu partout dans le monde et qui sont pour les développeurs intéressés par les technologies gravitant dans l’univers de Google. L'occasion de se rassembler et d’échanger.

La conférence Nantaise se déroulera sur une journée de 8h30 à 18h dans les locaux de l’Epitech à Nantes.

Deux types de sessions seront dispensés pendant cette journée : 
– Les conférences présentées par des googlers et/ou des speakers renommés,
– Les CodeLabs qui seront un moyen de mettre en pratique une techno accompagné d’un expert.

L’inscription est limitée et obligatoire. Une modeste participation de 10 euros est requise, celle-ci comprend le petit déjeuner le matin en arrivant ainsi que le repas. Néanmoins, l’inscription est gratuite pour les étudiants.

Le concours BeMyApp, dont le but est de développer en équipe en 48h, est soutenu par le DevFest.
Ce concours se déroule le week-end suivant la conférence à Marseille. 
En s’inscrivant au concours, l’aller-retour à Marseille et la restauration pour les 2 jours seront pris en charge. Petit bonus: l’inscription au DevFest devient gratuite.

L’ensemble des informations complémentaires sur le planning, les speakers, etc. sont disponibles sur le lien attaché à l’article.

#java #google #devfest #gdg

GAG : Google Annotation Gallery

 

Quel développeur n’a jamais été confronté à du code lui faisant ressentir les plus vives émotions sans pouvoir les partager de manière formelle ?
Ces émotions peuvent aller de la simple satisfaction d’avoir écrit un code parfait à l’envie de tordre le cou à l’auteur des milliers de lignes incompréhensibles que l’on doit débugger.

Aujourd’hui, cela est possible. Grâce au projet GAG, plus sérieusement Google Annotation Gallery, vous allez pouvoir annoter votre code ainsi que celui sur lequel vous allez devoir intervenir.
Vous allez pouvoir communiquer vos sentiments et vos pensées à l’aide d’un jeu d’annotations.

Ces annotations sont reparties selon 5 groupes : 
– disclaimer
– enforceable
– literary
– remark
– team

Certaines de ces annotations peuvent fournir un comportement au prix d’un peu de configuration et de la librairie gag-agent.

Je vous invite à découvrir l’ensemble des annotations disponibles et d’exprimer vos émotions à vos collègues 🙂

Attention toutefois à certains comportements d’annotation en environnement de production !

#java #gag #google #detente #émotion

Travailler avec une collection Java

Le sujet de l’article d’aujourd’hui a pour but de présenter (et/ou rappeler) les différents moyens que l’on peut mettre en oeuvre pour travailler avec une collection en Java.

Pourquoi un tel article me direz vous ? L’ensemble des outils présentés sont connus et reconnus par l’ensemble de la communauté de développeurs.
Eh bien, je suis forcé de constater que ce n’est pas encore tout à fait vrai et que certains les ignorent encore 😉

Les cas d’utilisation que je vais essayer de couvrir sont les suivants :

– Appliquer un traitement à tous les éléments d'une collection,
– Extraire des éléments d'une collection selon certains critères,
– Modifier (ou transformer) tous les éléments d’une collection,
– Gérer des collections typées.
– Construire une List.

Pour traiter ces différents cas, je vais prendre comme référence 3 outils :

-Le JDK (version 6)
– Commons Collections
– Google Guava

Ce sont les 2 principales librairies que j’utilise en général.

Appliquer un traitement à tous les éléments d'une collection

Ce cas est le plus courant. Il consiste à parcourir l’ensemble des éléments de la collection et appliquer un algorithme sur chacun des éléments.

JDK
Avec le JDK, il n’y a pas ‘36 solutions’. Une simple boucle for permettra de réaliser ce cas. Dans la classe Collections, classe utilitaire fournie avec le JDK, pas de méthode permettant de faire cela.

Commons Collections
L’api met à disposition une classe utilitaire nommée CollectionUtils. La méthode

public static void forAllDo(java.util.Collection collection, Closure closure)

permet à partir de l’objet de type Closure d’appliquer un traitement sur chacune des occurrences de l’ensemble.

Google Guava
L’api met à disposition une classe nommée Collection2. La méthode

public static <F,T> Collection<T> transform(Collection<F> fromCollection,
Function<? super F,T> function)

Elle permet d’appliquer la fonction passée en paramètre sur l’ensemble des occurrences de la collection. On remarque la présence des générics pour cette api.
Attention à cette méthode qui applique le traitement de façon lazy.

Extraire des éléments d'une collection selon certains critères

JDK
Une fois n’est pas coutume, mais pour réaliser ce genre d’opération, le JDK reste le parent pauvre dans ce domaine.
En effet, pour collecter un ensemble d’items dans une collection, il n’existe rien que l’on puisse utiliser directement. L’option possible est de faire à nouveau une boucle for et de travailler sur chaque occurrence en implémentant l’algorithme dans le corps de la boucle.
Le principal inconvénient que je peux voir est la difficulté de factorisation du traitement.

Commons Collections
Ici, nous pourrons trouver des outils plus élaborés. Toujours sur la base de la classe CollectionUtils, nous allons avoir recours aux méthodes suivantes :

– public static java.util.Collection select(*)
– public static java.util.Collection selectRejected(*)
– public static void filter(java.util.Collection collection,
Predicate predicate)

Les deux premières méthodes permettent d’effectuer une sélection à partir de critères caractérisés par la classe Prédicate. Cette dernière va permettre de définir des conditions qui rendront éligible ou non, un item de la collection. Chaque item identifié comme éligible sera ajouté à la collection retournée par la méthode.
La première méthode est la réciproque de la deuxième, c’est à dire, que la première va sélectionner les items tandis que l’autre va conserver uniquement ceux qui ne remplissent pas les critères.
La dernière méthode (filter) élimine directement dans la collection passée en paramètre, les items ne répondant pas aux critères.

Google Guava
Nous retrouvons dans cette api, une méthode de sélection que l’on a commenté dans le chapitre précédent :

public static <E> Collection<E> filter(Collection<E> unfiltered,
Predicate<? super E> predicate)

Contrairement à Commons Collections, Guava propose de manipuler les collections dans un contexte sécurisé par l’utilisation des générics.

Modifier (ou transformer) tous les élements d’une collection

On peut avoir le besoin de transformer (changer le type de) l’ensemble des éléments d’une collection. Voyons ce que propose les 3 outils dans ce domaine :

JDK
Pour adresser ce cas, pas de grande nouveauté une nouvelle fois pour le JDK :

– La traditionnelle boucle for

Commons Collections
L’api propose 2 types de méthode :

– public static java.util.Collection collect(*)
– public static void transform(java.util.Collection collection,
Transformer transformer)

Elles se différencient par de petites subtilités, mais elles ont globalement la même fonction.

Google Guava
Pour Guava, une seule méthode, à peu près identique à celle vue ci-dessus :

– public static <F,T> Collection<T> transform(Collection<F> fromCollection,
Function<? super F,T> function)

Nous avons déjà vu cette méthode dans un chapitre précédent.

Gérer des collections typées

Depuis l’arrivée des générics (il y a un moment maintenant 🙂 ), nous sommes en mesure d’écrire du code plus sécurisé. Aujourd’hui, seule la librairie Commons Collections ne permet pas l’utilisation des collections typées. Ce choix a été fait par volonté de garder une compatibilité avec l’ensemble des versions du jdk, notamment sur les versions antérieures à la 5. Néanmoins, Commons Collections propose un mécanisme permettant de gérer ce point.

JDK
Les collections typées sont natives depuis la v5 du JDK. Dans ces conditions, l’utilisation de collection typée ne pose aucun problème.
Au delà du typage statique fourni par les générics, le JDK propose un typage dynamique pour palier à certains cas d’utilisation ou le typage statique ne serait pas suffisant. (http://docs.oracle.com/javase/6/docs/api/index.html?java/util/package-summary.html)

Commons Collections
Comme nous l’avons vu en introduction, cette librairie ne supporte pas les générics. Néanmoins, un mécanisme existe afin de ‘simuler’ le principe.
La méthode suivante permet de créer une collection typée (façon Commons Collections) :

– public static java.util.Collection typedCollection(java.util.Collection collection
java.lang.Class type)

Le principe repose sur le typage dynamique d’une collection. le type des items, qui seront acceptés dans la collection, est défini dynamiquement. Aucune vérification statique ne pourra être effectuée (à la compilation). En revanche, si au runtime une instance d’un type différent est insérée alors une exception sera lancée.

Google Guava
Cette implémentation fait un mix des deux, c’est à dire que l’utilisation des générics est native et que l’on a tout un ensemble d’outils vus en partie ci-dessus permettant de travailler sur les collections.

Construire une List
Ce dernier chapitre va décrire les possibilités offertes pour l’instanciation d’une nouvelle liste.

JDK

Deux possibilités sont offertes :

List<E> myList = new ArrayList<E>();
myList.add(e1);
myList.add(e2);

Ou alors, en une seule ligne, avec la classe java.util.Arrays :

List<E> myList = Arrays.asList(e1, e2, e3);

Commons Collections
Je n’ai pas relevé de manière particulière ou plus originale que celle décrite ci dessus.

Google Guava
Chez Google, on a le sens du pratique et du code concis. En effet, la création d’une liste peut se faire via une factory :

public List<E> myList = Lists.newArrayList();

A première vue, rien d’extraordinaire, l’instruction tient sur une ligne, comme pour la version du JDK. En revanche, ce qui est plus appréciable, c’est l’économie d’écriture, dans la partie droite, du type des objets contenus dans la future instance. Ceci grâce à l’inférence de type réalisée sur la partie gauche de l’instruction que le type n’est pas obligatoire.

Une chose plus intéressante encore est la manière d’insérer des valeurs par défaut dans la liste :
public List<E> myList = Lists.newArrayList(e1,e2, e3, e4);

Cette technique est très pratique, notamment dans le cadre de tests unitaires.

Conclusion
En conclusion, en cherchant bien on trouve toujours chaussure à son pied pour travailler avec une collection (que l’on soit sur une version 1.2 du JDK, ou que l’api guava a été acceptée sur le projet).

J’ai un fort penchant pour l’api Guava, qui offre des outils efficaces et élégants à mettre en place.
Je n’ai couvert qu’une infime partie des possibilités offertes par ces outils, l’ensemble des autres types inclus dans les domaines des collections sont aussi couverts par ces outils. N’hésitez pas à mettre le nez dans la javadoc, vous serez surpris de ce que l’on peut y trouver 😉

#java #google #guava #collection #commons

Guava Release 12.0

Le 30 avril, une nouvelle release de la librairie Guava est sortie. C’est la version 12.
Ci-dessous un petit historique des versions précédentes :

– r01 2009-09-15
– r02 2010-01-04
– r03 2010-04-09
– r04 2010-04-27
– r05 2010-04-27
– r06 2010-07-07
– Release07 2010-09-22
– Release08 2011-01-27
– Release09 2011-04-07
– Release10 2011-09-28 (2011-10-10)
– Release11 2011-12-18 (2012-01-09, 2012-02-22)
– Release12 2012-04-30

La première version r01 n’incluait pas Google Collections.

Disponibilité sur Central Repository de Maven
Cette nouvelle release de Guava sera disponible sur le repo Maven selon les références suivantes :

– Api guava : com.google.guava:guava:12.0
– Api guava-gwt : com.google.guava:guava-gwt:12.0

Les principaux changements

43 issues ont été traitées. La liste ici : http://goo.gl/rKLGr

La dernière version (release 12) fait un break avec les versions précédentes en terme de compatibilité. La dernière mouture ne supporte que l’avant dernière version du JDK (6). Jusqu’à maintenant, l’ensemble des versions (r01 -> Release11) supportait la version 5 du JDK.
La raison de la dépendance avec le JDK 6 est liée à l’utilisation de classes et interfaces arrivées avec cette version.
Ci-dessous les éléments qui ont créé cette dépendance :
-Nouvelle classe ImmutableSortedSet qui implémente l’interface NavigableSet,
– Nouvelle classe ImmutableSortedMap qui implémente l’interface NavigableMap,
– Ajout des méthodes de factory (avec inférence de type) : newArrayDeque, newLinkedBlockingDeque, newCopyOnWriteArrayList, newCopyOnWriteArraySet
– etc

Autres ajouts significatifs (liste non exhaustive)

– Introduction de la classe MediaType (avec la perspective de séparer les responsabilités entre MediaType et MediaRange un jour)
– Introduction de FLuentIteable : interface riche permettant de manipuler les types itérables
– Introduction de HashCodes : Factory de création de hashcode
– Ajout d’un nouveau package : com.google.common.reflect contenant notamment le type TypeToken (équivalent en mieux de java.lang.Class)
– etc

Nous avons vu un aperçu des nouveautés contenues dans cette nouvelle mouture. En suivant le lien du post vous aurez tous les détails.

#java #google #guava #lib

Propulsé par WordPress.com.

Retour en haut ↑

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