Contrairement à ce que laisse entendre une idée largement répandue, les points-virgules (;) ne sont pas obligatoires en JavaScript. Hormis quelques exceptions, un retour à la ligne aura exactement le même effet. Il ne s’agit pas d’une « tolérance » de certains navigateurs : cela fait partie de la spécification ECMAScript, et ce comportement (Automatic Semicolon Insertion) est parfaitement supporté par l’ensemble des moteurs JavaScript existants.
Isaac Z. Schlueter n’utilise les points-virgules que lorsqu’ils sont nécessaires dans ses scripts. Il a reçu beaucoup de critiques à ce sujet puisqu’il est l’auteur de npm, un projet très populaire dans la communauté Node.js. Il y a répondu sur son blog, en reprenant les arguments de ses détracteurs. Je trouve l’explication très claire : il présente en quelques lignes l’ensemble des règles, puis se concentre sur les seules exceptions qui comptent, c’est à dire celles que l’on rencontre vraiment en programmant.
L’article en question : An Open Letter to JavaScript Leaders Regarding Semicolons.
Je vous recommande également la lecture d’un autre document, JavaScript Semicolon Insertion: Everything you need to know. Inimino y décrit de manière plus approfondie toutes les subtilités de cette règle, et les exemples présentés sont très intéressants.
Pour terminer, il est important de préciser qu’aucun de ces auteurs n’essaie d’imposer cette manière de coder : il s’agit juste d’expliquer en quoi cette partie de JavaScript, qui a la réputation d’être « imprévisible », est tout à fait valide en plus d’être facile à maîtriser.
Une dernière chose, si vous utilisez JSHint, il vous suffit de placer ceci en haut de vos scripts pour désactiver l’erreur de point-virgule absent : /*jshint asi: true */
6 commentaires
Poster un commentaire
Flux RSS des commentaires de cet article
J’ai un projet web pour les cours, je suis sûr que si j’écris mon JS comme ça je me fais assassiner. xD
Le 03 Oct. 2011 à 17h09 par Maarx
@Maarx : Les règles de codage d’un projet passent avant tout bien sûr. Mais si ces règles n’ont pas été définies et que tu débutes un nouveau projet, alors j’imagine qu’on ne va pas t’interdire d’écrire du code parfaitement valide… si ? ;-)
Le 03 Oct. 2011 à 17h21 par Pierre Bertet
Perso, je ne vois même pas l’intérêt de ne pas être explicite sur les points-virgules;
Je ne vois que deux alternatives :
– ne pas les mettre quand ils sont implicites. Conséquence: il faut connaître toutes les petites règles, notamment celles qui peuvent rendre un code non-fonctionnel.
– les mettre systématiquement.
Conséquence pour le dev: pas besoin de réfléchir, il peut se concentrer sur l’important.
Conséquence collatérale: les outils peuvent checker plus facilement le code, et le minifier.
Le 03 Oct. 2011 à 17h47 par JulienW
@Julien :
J’ai lu plusieurs fois cet argument (et j’étais tout à fait convaincu) : l’insertion automatique des
;
est imprévisible, car il y a trop de règles à connaître.C’est une grosse exagération. Certaines sont déjà connues de tous : on sait qu’un retour à la ligne après un
return
sera interprété comme la fin de l’instruction, et l’utilisation des points-virgules explicites n’y change rien : il faut connaître cette règle. Sorti des exemples tordus, dans le monde réel il ne reste qu’une, voire deux règles à retenir (voir le premier article). Il est de toute façon intéressant de connaître le comportement du langage que l’on utilise :-)Pour les outils, aucun des principaux outils de minification ne pose problème (voir le premier article : l’insertion des points-virgules est prise en compte par ces outils, des points virgule sont insérés). Même chose pour checker le code, j’utilise JSHint sans aucun problème avec ce type de code.
Pour l’intérêt, c’est très personnel (enfin quand on est sur son propre projet hein, pas chez les autres ;-)), et le but est surtout de démontrer que le code n’est pas « moins valide » ou « moins sûr » qu’avec des points-virgules explicites, comme on l’entend souvent.
Ceci dit, je ne suis pas totalement convaincu, mais je l’ai mis en pratique sur un projet, pour voir. Eh bien, il me semble que le code est plus lisible dans l’ensemble. Mais encore une fois, c’est un point de vue très personnel : le principal, c’est que les règles du projet soient bien définies (on a tous nos préférences pour certains détails).
Un autre jour, on parlera de placer les virgules en début de ligne ;-)
Le 03 Oct. 2011 à 18h15 par Pierre Bertet
Mon discours n’est pas du tout que le code est moins valide ou moins sûr. Je suis conscient que ça existe, que ça fait partie du langage, etc.
Néanmoins je considère (personnellement:!-) ) qu’on a déjà assez de choses comme ça à faire attention.
Pour ce qui est des points-virgules en début de ligne, c’est encore une autre histoire ;)
Le 04 Oct. 2011 à 15h17 par JulienW
On est d’accord :-)
Le 04 Oct. 2011 à 19h35 par Pierre Bertet