Notre code doit être aussi propre et lisible que possible.
Câest en fait un art de la programmation â prendre une tâche complexe et la coder de manière correcte et lisible par lâhomme. Un bon style de code aide grandement à cela.
Une chose à aider est le bon style de code.
Syntaxe
Voici un aide-mémoire avec quelques règles suggérées (plus de détails ci-dessous) :
Discutons maintenant des règles et de leurs raisons en détail.
Rien nâest figé ici. Ce sont des préférences de style, pas des dogmes religieux.
Accolades
Dans la plupart des projets JavaScript, les accolades sont écrites sur la même ligne que le mot clé correspondant, et non sur la nouvelle ligne, dans un style dit «égyptien». Il y a aussi un espace avant un crochet dâouverture.
Comme ceci :
if (condition) {
// fait ceci
// ...et cela
// ...et cela
}
Une construction sur une seule ligne, comme if (condition) doSomething(), est un cas important. Devrions-nous utiliser des accolades ?
Voici les variantes annotées pour que vous puissiez juger de leur lisibilité :
- ð Les débutants font parfois cela. Câest une mauvaise pratique ! Les accolades ne sont pas nécessaires :
if (n < 0) {alert(`Power ${n} is not supported`);} - ð Lorsque vous nâutilisez pas dâaccolades, évitez de passer pas à la ligne car il est facile de se tromper :
if (n < 0) alert(`Power ${n} is not supported`); - ð Ne pas utiliser dâaccolade sur une seule ligne, est acceptable tant que cela reste court :
if (n < 0) alert(`Power ${n} is not supported`); - ð Voici une bonne manière de faire :
if (n < 0) { alert(`Power ${n} is not supported`); }
Pour un code tres court, une ligne est autorisée, par exemple if (cond) return null. Mais la variante numéro 4 est généralement plus lisible.
Longueur de la ligne
Personne nâaime lire une longue ligne horizontale de code. La meilleure pratique est de la scinder.
Par exemple :
// les guillemets backtick ` permettent de scinder la chaîne de caractères en plusieurs lignes
let str = `
ECMA International's TC39 is a group of JavaScript developers,
implementers, academics, and more, collaborating with the community
to maintain and evolve the definition of JavaScript.
`;
Et pour les déclarations if :
if (
id === 123 &&
moonPhase === 'Waning Gibbous' &&
zodiacSign === 'Libra'
) {
letTheSorceryBegin();
}
La longueur de ligne maximale est convenue au niveau de lâéquipe. Câest généralement 80 ou 120 caractères.
Indentations
Il existe deux types dâindentations :
-
Un retrait horizontal : 2 ou 4 espaces.
Une indentation horizontale est faite en utilisant 2 ou 4 espaces ou le symbole horizontal de tabulation (touche Tab). Lequel choisir est une vieille guerre sainte. Les espaces sont plus communs de nos jours.
Un des avantages des espaces sur les tabulations est quâils permettent des configurations de retrait plus flexibles que le symbole tabulation.
Par exemple, nous pouvons aligner les arguments avec la parenthèse dâouverture, comme ceci :
show(parameters, aligned, // 5 espaces à gauche one, after, another ) { // ... } -
Un retrait vertical: lignes vides pour fractionner le code en blocs logiques.
Même une seule fonction peut souvent être divisée en blocs logiques. Dans lâexemple ci-dessous, lâinitialisation des variables, la boucle principale et le retour du résultat sont fractionnés verticalement :
function pow(x, n) { let result = 1; // <-- for (let i = 0; i < n; i++) { result *= x; } // <-- return result; }Insérez une nouvelle ligne où cela aide à rendre le code plus lisible. Il ne devrait pas y avoir plus de neuf lignes de code sans indentation verticale.
Un point-virgule
Un point-virgule doit être présent après chaque déclaration. Même si cela pourrait éventuellement être ignoré.
Il y a des langages où le point-virgule est vraiment optionnel. Il est donc rarement utilisé. Mais dans JavaScript, il y a peu de cas où un saut de ligne nâest parfois pas interprété comme un point-virgule. Cela laisse place à des erreurs de programmation. Plus dâinformations à ce sujet dans le chapitre Structure du code.
Si vous êtes un programmeur JavaScript expérimenté, vous pouvez choisir un style de code sans point-virgule comme StandardJS. Autrement, il est préférable dâutiliser des points-virgules pour éviter les pièges possibles. La majorité des développeurs mettent des points-virgules.
Niveaux dâimbrications
Il ne devrait pas y avoir trop de niveaux dâimbrication.
Par exemple, dans une boucle, câest parfois une bonne idée dâutiliser la directive âcontinueâ pour éviter une imbrication supplémentaire.
Par exemple, au lieu dâajouter un if imbriqué conditionnel comme ceci :
for (let i = 0; i < 10; i++) {
if (cond) {
... // <- un autre niveau d'imbrication
}
}
Nous pouvons écrire :
for (let i = 0; i < 10; i++) {
if (!cond) continue;
... // <- pas de niveau d'imbrication supplémentaire
}
Une chose similaire peut être faite avec if/else et return.
Par exemple, les deux constructions ci-dessous sont identiques.
Le premier :
function pow(x, n) {
if (n < 0) {
alert("Negative 'n' not supported");
} else {
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
}
Et ceci :
function pow(x, n) {
if (n < 0) {
alert("Negative 'n' not supported");
return;
}
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
Le second est plus lisible, parce que le âcas marginalâ de n < 0 est traité tôt. Une fois la vérification effectuée, nous pouvons passer au flux de code âprincipalâ sans avoir besoin dâimbrication supplémentaire.
Placement des fonctions
Si vous écrivez plusieurs fonctions âhelperâ (auxiliaires) et le code pour les utiliser, il existe trois façons de les placer.
-
Déclarez les fonctions au-dessus du code qui les utilise :
// fonctions declarations function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } // le code qui les utilise let elem = createElement(); setHandler(elem); walkAround(); -
Le code dâabord, puis les fonctions
// le code qui utilise les fonctions let elem = createElement(); setHandler(elem); walkAround(); // --- fonctions helper --- function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } -
Mixte : une fonction est décrite là où elle a été utilisée pour la première fois.
La plupart du temps, la deuxième variante est préférée.
Câest parce quâen lisant du code, nous voulons dâabord savoir ce quâil fait. Si le code commence en premier, il devient clair dès le début. Ensuite, nous nâaurons peut-être pas besoin de lire les fonctions du tout, surtout si leur nom décrit ce quâelles font réellement.
Guides de style
Un guide de style contient des règles générales sur âcomment écrireâ du code. Exemple : les quotes à utiliser, le nombre dâespaces pour indenter, la longueur de ligne maximale, etc. Beaucoup de petites choses.
Lorsque tous les membres dâune équipe utilisent le même guide de style, le code est uniforme. Peu importe qui lâa écrit, câest toujours le même style.
Bien sûr, une équipe peut toujours écrire son propre guide de style, mais cela nâest généralement pas nécessaire. Il existe de nombreux guides existants à choisir.
Par exemple :
- Google JavaScript Style Guide
- Airbnb JavaScript Style Guide
- Idiomatic.JS
- StandardJS
- (il y en a plus)
Si vous êtes un développeur novice, commencez par le cheatsheet au début de ce chapitre. Ensuite, vous pouvez parcourir dâautres guides de style pour trouver plus dâidées et décider lequel vous préférez.
Linters automatisés
Les linters sont des outils permettant de vérifier automatiquement le style de votre code et de formuler des suggestions dâamélioration.
Ce qui est génial avec eux, câest que la vérification du style trouve également des bugs, comme une faute de frappe dans une variable ou un nom de fonction. En raison de cette fonctionnalité, lâutilisation dâun linter est recommandée même si vous ne souhaitez pas vous en tenir à un âstyle de codeâ particulier.
Voici quelques linters bien connus :
- JSLint â lâun des premiers linters.
- JSHint â plus de paramètres que JSLint.
- ESLint â probablement le plus récent.
Tous peuvent faire le travail. Lâauteur utilise ESLint.
La plupart des linters sont intégrés aux éditeurs: il suffit dâactiver le plug-in dans lâéditeur et de configurer le style.
Par exemple, pour ESLint, vous devez procéder comme suit :
- Installer Node.js.
- Installer ESLint avec la commande
npm install -g eslint(npm est un gestionnaire de paquets JavaScript). - Créez un fichier de configuration nommé
.eslintrcdans la racine de votre projet JavaScript (dans le dossier contenant tous vos fichiers). - Installez / activez le plug-in pour votre éditeur qui sâintègre à ESLint. La majorité des éditeurs en ont un.
Voici un exemple de .eslintrc:
{
"extends": "eslint:recommended",
"env": {
"browser": true,
"node": true,
"es6": true
},
"rules": {
"no-console": 0,
"indent": 2
}
}
Ici, la directive "extends" indique que nous nous basons sur lâensemble de paramètres âeslint:recommendedâ, puis nous spécifions les nôtres.
Il est aussi possible de télécharger des ensembles de règles de style à partir du Web et de les étendre. Voir http://eslint.org/docs/user-guide/getting-started pour plus de détails sur lâinstallation.
De plus, certains IDE prennent en charge le linting nativement, ce qui peut également être bien, mais pas aussi ajustables que ESLint.
Résumé
Toutes les règles de syntaxe de ce chapitre et les guides de style visent à améliorer la lisibilité, elles sont donc toutes discutables.
Lorsque nous pensons à écrire du âmeilleurâ code, les questions que nous devrions nous poser sont les suivantes : âQuâest-ce qui rend le code plus lisible et plus facile à comprendre ?â et âQuâest-ce qui peut nous aider à éviter les erreurs ?â. Telles sont les principales choses à garder à lâesprit lors du choix et du débat sur les styles de code.
Lisez les guides de style pour connaître les dernières idées à ce sujet et suivez celles que vous trouvez les meilleures.
Commentaires
<code>, pour plusieurs lignes â enveloppez-les avec la balise<pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepenâ¦)