Commentaire JavaScript

Deux syntaxes, un piège de fermeture et une illusion tenace : un commentaire JavaScript ne protège rien, il documente. Voir la différence évite de laisser du code mort et des notes internes en production.

Matthew Développeur front
Publié le
Mis à jour le
Lecture 5 minutes
Partager

Un commentaire JavaScript est ignoré par le moteur du navigateur. Il sert à expliquer une intention que le code ne dit pas, ou à neutraliser un bloc le temps d’un test. Ce qu’il ne fait pas : disparaître du fichier envoyé au visiteur.

Les deux syntaxes du commentaire JavaScript

Le commentaire de ligne commence par // et court jusqu’à la fin de la ligne.

// Recalcule le total avant l'envoi du formulaire
const total = calculerTotal(panier);

Le commentaire de bloc s’ouvre avec /* et se ferme avec */, sur autant de lignes que nécessaire.

/*
  Le tri se fait côté client tant que
  la liste reste courte.
*/

Un commentaire se place avant, après ou au milieu d’une instruction. La convention qui tient dans une équipe est simple : le commentaire de ligne au-dessus de ce qu’il décrit, le commentaire de bloc réservé aux en-têtes de fichier et à la documentation.

Neutraliser du code sans le supprimer

C’est l’usage le plus courant : mettre un bloc en commentaire pour vérifier qu’il est bien la cause d’un comportement. Le raccourci Ctrl + / sur Windows et Linux, Cmd + / sur Mac, commente et décommente la sélection dans Visual Studio Code comme dans PhpStorm.

Ce réflexe a une limite. Du code commenté qui reste en place plusieurs mois devient du code mort : personne ne sait plus s’il attend d’être réactivé ou s’il a été abandonné. L’historique Git tient ce rôle mieux qu’un commentaire. Supprimer le bloc et le retrouver dans un commit est plus sûr que le laisser dormir dans le fichier.

Le piège du commentaire de bloc

Les commentaires de bloc ne s’imbriquent pas. Le premier */ rencontré ferme le commentaire, quel que soit le nombre de /* ouverts avant lui. Commenter une portion de code qui contient déjà un commentaire de bloc laisse donc du code actif derrière la fermeture.

/*
  /* ancien calcul */
  const x = 1;
*/

Ici le commentaire se ferme dès la deuxième ligne. La déclaration de x reste active et le dernier */ provoque une erreur de syntaxe. Même effet avec une séquence */ qui apparaît dans une chaîne de caractères ou dans une expression régulière à l’intérieur du bloc commenté.

Pour neutraliser plusieurs lignes sans surprise, le commentaire de ligne appliqué à chaque ligne est plus fiable. C’est exactement ce que fait le raccourci de l’éditeur.

JSDoc, le commentaire qui documente

Un commentaire de bloc ouvert par /** est interprété par les éditeurs et par les outils de documentation. Les types annotés remontent dans l’autocomplétion, sans avoir à passer le projet à TypeScript.

/**
 * Applique une remise à un montant.
 * @param {number} montant - Montant hors taxes.
 * @param {number} taux - Taux de remise entre 0 et 1.
 * @returns {number} Montant remisé.
 */
function appliquerRemise(montant, taux) {}

Sur un projet repris à un autre prestataire, c’est le premier investissement rentable : documenter les fonctions d’entrée d’un module avant d’y toucher.

Ce que deviennent les commentaires en production

Un fichier JavaScript est servi tel quel au navigateur. Les commentaires y sont lisibles par n’importe qui, exactement comme le commentaire HTML. La minification les retire du fichier livré sans toucher aux sources, et c’est l’une des optimisations appliquées lors d’un travail sur la vitesse de chargement.

Deux réserves. La minification ne traite que les fichiers qu’on lui donne : un script inséré directement dans le HTML par une extension y échappe souvent. Et les source maps, quand elles sont publiées sur le serveur, republient le code d’origine avec ses commentaires. Un jeton d’API laissé en commentaire ressort alors intact.

Une convention d’équipe plutôt qu’un réflexe

Le bon commentaire explique pourquoi, pas quoi. Un // incrémente i ne sert à rien, la ligne le dit déjà. Un // l’API renvoie les dates en UTC, on décale ici évite la prochaine régression. Sur les projets que nos équipes de développement web reprennent, ce sont ces commentaires qui font gagner des jours.

fonction basique en javascript sur visual studio code

À retenir
  • Deux syntaxes : // pour une ligne, /* */ pour un bloc, sans imbrication possible.
  • Un commentaire JavaScript est lisible dans le fichier servi au visiteur, aucune information sensible n'y a sa place.
  • Du code commenté qui survit à une mise en production est du code mort, l'historique Git le conserve mieux.
  • JSDoc transforme un commentaire de bloc en documentation exploitée par l'éditeur.
  • Un commentaire explique pourquoi une ligne existe, pas ce qu'elle fait.
Questions fréquentes

Questions fréquentes sur les commentaires JavaScript

La syntaxe, les erreurs qu’elle provoque et ce qu’il faut commenter.

// commente tout ce qui suit jusqu’à la fin de la ligne. /* */ commente tout ce qui se trouve entre les deux marqueurs, sur une ou plusieurs lignes. Le premier sert aux notes courtes, le second aux en-têtes de fichier et à la documentation.

Non. Le premier */ ferme le commentaire, même si plusieurs /* ont été ouverts. Commenter un bloc qui contient déjà un commentaire de bloc laisse du code actif et provoque une erreur de syntaxe sur le marqueur de fermeture restant.

Ils ne sont pas exécutés, donc sans effet sur la vitesse d’exécution. Ils pèsent en revanche dans le fichier téléchargé. La minification les supprime du fichier livré, ce qui règle la question sans rien retirer aux sources.

Sélectionner les lignes puis Ctrl + / sur Windows et Linux, Cmd + / sur Mac. L’éditeur préfixe chaque ligne avec // plutôt que d’ouvrir un bloc, ce qui évite le problème d’imbrication. Le même raccourci décommente.

Non. Un commentaire qui paraphrase la ligne au-dessus se périme au premier changement et devient trompeur. Ce qui mérite un commentaire : une contrainte externe, un contournement, une règle métier que le code ne peut pas exprimer seul.

Matthew

Développeur front

Développeur front spécialisé en Angular et UX designer. Chargé de l'intégration et du développement des interfaces des outils sur mesure : ERP, CRM, applications web et mobiles. Son approche : associer expertise technique et réflexion UX pour créer des solutions fiables, durables et centrées sur les utilisateurs.

LinkedIn
À lire ensuite