Comme io.js maintenant prend en charge ES6 vous pouvez enfin utiliser les mots clés const
et let
. Évidemment, let
est le successeur de var
, juste avec quelques super-pouvoirs.
Mais qu'en est-il de const
? Je sais, bien sûr, ce que signifie "constant", mais je me demandais quand l'utiliser (concernant les meilleures pratiques).
Par exemple, si je crée un module qui nécessite un autre module, je pourrais écrire:
'use strict';
const util = require('util');
const foo = function () {
// Do something with util
};
module.exports = foo;
Fondamentalement, j'ai remplacé chaque occurrence de var
par const
. D'une manière générale, je pense que c'est correct, mais si je suis ce schéma, cela me laisse beaucoup plus d'utilisations de const
que de let
, car la plupart des variables ne sont pas des "variables" dans un sens littéral.
Est-ce que c'est du bon style? Dois-je plutôt opter pour let
? Quand devrais-je choisir const
plutôt que let
?
const
peut normalement être utilisé lorsque vous ne voulez pas que votre programme
pour attribuer quoi que ce soit à la variable
"use strict";
const a = 1;
a = 2;
produira TypeError: Assignment to constant variable.
.
pour utiliser la variable sans initialiser explicitement.
"use strict";
const a;
produira SyntaxError: Unexpected token ;
Autrement dit, je dirais,
utilisez const
chaque fois que vous souhaitez que certaines variables ne soient pas modifiées
utilisez let
si vous voulez exactement le contraire de const
utilisez var
, si vous voulez être compatible avec les implémentations ES5 ou si vous voulez une portée de niveau module/fonction.
Utilisez let
uniquement lorsque vous avez besoin de la portée au niveau du bloc, sinon l'utilisation de let
ou var
ne ferait aucune différence.
J'ai le même sentiment que vous décrivez. Un grand pourcentage de variables déclarées dans mon code ont tendance à être constantes, même des objets et des tableaux. Vous pouvez déclarer des objets et des tableaux constants tout en étant en mesure de les modifier:
const arr = [];
arr.Push(1);
arr;
// [ 1 ]
const obj = {};
obj.a = 1;
obj;
// { a: 1 }
AFAIK modules ES6 ne nécessitent pas de déclarations de variables lors de l'importation, et je soupçonne que io.js se déplacera vers les modules ES6 dans un avenir proche .
Je pense que c'est un choix personnel. J'utiliserais toujours const lors de la demande de modules et pour les variables locales de module (foo
dans votre exemple). Pour le reste des variables, utilisez const de manière appropriée, mais ne devenez jamais fou et utilisez const partout. Je ne connais pas les performances entre let et const donc je ne peux pas dire s'il est préférable d'utiliser const autant que possible.
Test de performances const
vs let
utilisation sur require
pour Node.js 6.10:
require('do-you-even-bench')([
{ name: 'test 1', fn: function() {
const path = require('path');
}
},
{ name: 'test 2', fn: function() {
let path = require('path');
}
}
]);
test 1 .... 2 547 746,72 op/s
test 2 .... 2 570 044,33 op/s