Dave Herman, ingénieur à Mozilla Labs et membre du TC39, était présent à la conférence YUIConf 2011 pour une présentation inédite de ce que nous réserve le futur du standard ECMAScript et du langage JavaScript.
Cette spécification ne sera pas finalisée avant 2013, mais des implémentations devraient bientôt voir le jour sur Firefox et Chrome. Le support d'ECMAScript 6 sur ce dernier profitera de facto au framework Node.js articulé autour du moteur V8.
Herman a souligné en début de keynote qu'une grande partie de ces nouveautés vient remplacer le code passe-partout que les développeurs JavaScript doivent placer un peu partout dans leur nouveau projet.
Ainsi naîtra la notion de Module en JavaScript pour lever l'obligation d'encapsuler son code dans une fonction anonyme afin d'éviter la propagation de variables globales.
Ces modules pourront être importés via code bloquant que le parseur parcours à la recherche d'instructions imports. Les fichiers ainsi appelés seront chargés sans devoir écrire en dur d'autres balises <script> et jouer avec le DOMReady.
Code javascript : | Sélectionner tout |
1 2 3 4 5 6 | module Collections{ export function Dict(){} import { $ } from "jquery.js" import { map, each } from "underscore.js" } |
Dave Herman a aussi réintroduit le mot clé let, qui revient dans le processus de standardisation des années après son annulation pour ECMAScript 4.
Il se positionne comme une alternative complémentaire de var, évitant les erreurs récurrentes où une variable déclarée dans une fonction se retrouve hors de portée dans une fonction fille.
Let permettra des assignations collectives non strictes, rendant cette écriture de code possible : let [x,y] = [3,4,5]; // x=3, y = 4.
Notons aussi l'arrivée des valeurs par défaut des fonctions, évitant le recours systématique au passage d'objets d'options, souvent fusionnés avec d'autres objets JSON portant les valeurs par défaut en tout début d'une méthode.
Toujours dans l'optique d'épargner aux développeurs du code passe-partout, Herman a évoqué le nouveau mot-clé « yield » qui permettra de stopper l'exécution d'une méthode jusqu'au prochain appel à method.next().
Cette notion de « fonctions génératrices » permet d'éviter les « pyramides de ruines », comme les décrit Herman. Ces structures imbriquées qui résultent de la nécessité de n'exécuter une partie du code que lorsqu'une autre a fini son travail (le cas d'une requête asynchrone par exemple).
Fini le callback spaghetti !
Code javascript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | spawn(function*(){ // Notez l'étoile qui distingue les fonctions génératrices var foo = yield read('foo.txt'), var bar = yield read('bar.txt'), var baz = yield read('baz.txt'), yield sleep(1000); status.innerHTML = foo + bar + baz }); |
ECMAScript 6 introduira aussi les chaînes de caractères multilignes, entourées d'accents graves (`).
Code javascript : | Sélectionner tout |
1 2 3 | var htmlString = `Say hello to multi-line strings!` |
JavaScript aura aussi des objets proxy capables de contrôler tout ce qui se passe dans les méthodes qu'ils encapsulent. Notons aussi l'interpolation des chaines.
Code javascript : | Sélectionner tout |
1 2 | var firstName = "Jack"; var message = `Hello ${firstName}!`; // "Hello Jack!" |
Et bien d'autres nouveautés à découvrir en détail sur la vidéo de l'évènement :
Et vous ?
Que pensez-vous de ces nouveautés d'ECMAScript 6 ?