Il y a quelques temps, j'évoquai dans un article les évolutions à venir de Java 7 concernant le cloud computing.
D'un point de vue plus terre-à-terre, le projet Coin a pour but d'apporter quelques améliorations au JDK actuel. Certaines ont d'ores-et-déjà commencé à être implémentées dans Netbeans 7 béta et Eclipse 3.7 (à venir dans l'année). Le but ici n'est pas de révolutionner le langage mais de lui apporter quelques touches plus "fraîches" dans l'optique de le rendre toujours plus agréable à lire et utiliser. Petit tour d'horizon
Underscores dans les literals
L'intention ici est de simplement rendre le code plus lisible par l'ajout d'underscores dans les entiers par exemple ou les expressions hexadécimales. Exemples :
// Ecriture classique int i = 1234567890; // Avec Coin int i = 1_234_567_890; // Ou encore String hexRed = 0xFFCC99; // Avec Coin String hexRed = 0xFF_CC_99;
Utilisation des String dans les switch
Encore maintenant, les switch
ne sont utilisables qu'avec des types primitifs. L'intérêt est donc d'étendre leur utilisation pour éclaircir et améliorer les performances de certains extraits :
// Avec Java actuel int monthNameToDays(String s, int year) { if(s.equals("April") || s.equals("June") || s.equals("September") || s.equals("November")) return 30; if(s.equals("January") || s.equals("March") || s.equals("May") || s.equals("July") || s.equals("August") || s.equals("December")) return 31; if(s.equals("February")) ... else ... } } // Deviendra donc avec Coin int monthNameToDays(String s, int year) { switch(s) { case "April": case "June": case "September": case "November": return 30; case "January": case "March": case "May": case "July": case "August": case "December": return 31; case "February": ... default ... } }
Litéraux pour les collections
L'instanciation de collections est parfois fastidieuse lorsqu'il s'agit par exemple de créer une variable statique dans une classe. Le projet Coin propose donc une nouvelle utilisation :
List<List<String>> monthsInTwoLanguages = {{"January", "February"},{"Gennaio", "Febbraio"}};
L'opérateur "Diamand"
Le but ici est de simplifier l'écriture des generics, parfois gourmande en caractères :
// Une variable "longiligne" du type : List<List<List<List<String>>>> list = new ArrayList<List<List<List<String>>>>(); // Deviendra List<List<List<List<String>>>> list = new ArrayList<>();
Multi-catch
De la même façon, l'écriture de blocs try-catch
peut parfois s'avérer lourde si l'on veut maintenir une bonne gestion des erreurs. Voici donc l'amélioration proposée :
// Un code classique try { // Reflective operations calling Class.forName, // Class.newInstance, Class.getMethod, // Method.invoke, etc. } catch(ClassNotFoundException cnfe) { log(cnfe); throw cnfe; } catch(InstantiationException ie) { log(ie); throw ie; } catch(NoSuchMethodException nsme) { log(nsme); throw nsme; } catch(InvocationTargetException ite) { log(ite); throw ite; } // Pourra s'alléger comme ceci try { // Reflective operations calling Class.forName, // Class.newInstance, Class.getMethod, // Method.invoke, etc. } catch(ClassNotFoundException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { log(e); throw e; }
Tout ceci n'est bien sûr qu'un aperçu de ce qui est évoqué dans le projet Coin, lui-même encore à l'état de proposition, mais on peut voir que bien des choses prometteuses sont à venir pour faciliter encore et toujours l'utilisation de Java!
Sources :
- http://blogs.sun.com/darcy/tags/projectcoin
- http://stuartmarks.wordpress.com/2010/12/23/jdk7-coin-and-making-libraries-fresh-and-minty/
- http://openjdk.java.net/projects/coin/
- http://www.devoxx.com/display/Devoxx2K10/Project+Coin++Small+Language+Changes+in+JDK+7
- http://www.programmez.com/actualites.php?id_actu=9335
0 commentaires:
Enregistrer un commentaire