Bonjour à tous,
Les discussions sur la norme EcmaScript6 pour JavaScript commençAnt à se tasser et leur implémentation arrivant gentiment dans Node.js et les navigateurs, je pense que ça serait une bonne idée de faire un article pour en parler et expliquer en quoi c'est une véritable révolution pour le langage. Je sais, plein de monde en parle déjà bien assez partout ailleurs. Mais vous avez fait de splendides billets techniques sur les dernières nouveautés de python (s'il ne fallait citer que ceux-là), alors pourquoi ne pas parler de JavaScript ? Avec la place qu'il occupe aujourd'hui, ça me paraît plutôt important…
Cet article pourrait inclure les sujets suivants :
- Les fonctions raccourcies a.k.a. arrow functions
- Le mot-clé class
- let, const et var
- Les itérateurs et la boucle for…of
- Les générateurs/coroutines
- L'opérateur
...
(point de suspension)), i.e. paramètres du reste + décomposition - Les autres bricoles diverses peut-être un peu moins importantes (Array.from/of, Map/Set/WeakMap/WeakSet, promesses, raccourcis dans les littéraux objet, paramètres par défaut des fonctions, …)
- La compatibilité des navigateurs dans tout ça
J'en ai sûrement oublié, car il y en a beaucoup plus que ça, et il y a plein de choses que je n'ai pas encore testé moi-même. Pour le moment, mes premiers ressentis :
- Les arrow functions sont extrêmement pratiques, c'est un raccourci plus que bienvenu et en plus ça résoud des problèmes de propagation du this
- Mème s'il ne faut pas oublier le fonctionnement prototypal du langage, le mot-clé class et ses adjoints extends et super sont aussi très bienvenus; ça facilite grandement l'écriture et la compréhension de l'héritage classique. Je sais, ce sucre syntaxique a été passablement critiqué parce qu'il tend à cacher des choses au novice, et parce qu'on perd en flexibilité entres autres, mais bon.... je ne pense pas qu'on puisse être fondamentalement contre une simplification, et ce n'est pas comme si on était absolument obligé de l'utiliser (on peut toujours le faire « à l'ancienne »).
- Quand on a fait du Java, du C++ et un peu de python, la notion d'itérateur paraît tellement évidente qu'on se demande pourquoi ça n'a pas réellement émergé plus tôt. Gare à la confusion for…of et for…in! Le mieux sera sans doute d'oublier complètement for…in à l'avenir.
- l'arrivée relativement récente des générateurs/coroutines un peu partout (PHP et python entres autres) me réjouit; ça me paraît d'autant plus important et intéressant en JavaScript qu'il a été particulièrement bâti sur des concepts et API asynchrones (alors qu'en python on peut facilement s'en passer et qu'en PHP ça ne me paraît de très loin pas si utile). Question bonus, qu'est-ce qui justifie l'astérisque dans la syntaxe ?
- Le reste est essentiellement une question de cosmétique, mais c'est sympa quand même.
Le gros WTF qui me reste est celui des variables… OK pour const, ce n'était pas forcément indispensable mais ça permet de mieux sécuriser le code. Par contre je ne comprends encore pas trop le problème avec var et pourquoi du coup on a inventé let. ON pourra en discuter ailleurs si vous avez des réponses longues à fournir sur le sujet.
Du côté du support des navigateurs, en gros la situation est actuellement la suivante: l'essentiel est déjà implémenté dans les dernières versions de Firefox et Crhome; Edge en partie aussi; Safari pas encore mais on peut raisonnablement supposer que ça le sera dans la prochaîne version majeure (et donc sûrement dans iOS10/OS X 10.11) vu que ça existe dans la technical preview. Et comme d'habitude, on peut aller se brosser pour IE, même IE11. Sources: MDN et caniuse
Quant à Node.js, puisqu'il est basé sur V8 comme Chrome, il suit les évolutions de ce dernier; pas mal de fonctionalités ES6 sont déjà disponibles par défaut (sans flag --harmony
). Testé avec la v4.4.3.
ET vous, qu'en pensez-vous ? Faire un article là-dessus serait intéressant, ou est-ce qu'on en parle déjà bien assez ailleurs ? Serait-ce encore beaucoup trop tôt pour en parler ?
Avez-vous déjà testé tout ou partie de ces nouveautés ? Des avis ?
Envisagez-vous, ou pensez-vous qu'on peut envisager une utilisation concrète en production bientôt (avec ou sans transpileur) ? C'est aussi une question à laquelle on peut tenter de répondre en conclusion de l'article.
Voilà… à vous maintenant !