Logo JavaScript

Pourquoi certains n’utilisent pas le ; et pourquoi ils ont raison

Flattr this!

J'adore râler, en fait même, carrément insulter les développeurs qui ne mettent pas les points-virgules en fin d'instruction.

Mais il faut dire une chose. D'une certaine façon, ils ont raison.

Tout simplement parce que ça force à une certaine qualité de code.

Ça force à bien déclarer ses variables, à bien utiliser les accolades et pour faciliter la maintenance à avoir un code qui ressemble à quelque chose. Sinon ça déconne à toute vitesse et alors vous n'avez plus le choix. Sauf que parmi les premières choses que fait un minifier, c'est de faire sauter les ; qu'il jugera inutile pour mettre d'autres structures de code. Utilisables mais illisibles au quotidien. Lisez du code minifié, vous allez rire pour le maintenir.

Du coup, quand je vois les mecs sur Github qui codent comme des gros dégueulasses qui pisseraient dans le réservoir de leur voiture pour économiser de l'essence. Je me dis que c'est un moindre mal de ne pas mettre les ; comme les mecs de Bootstrap. Au moins ça les force à avoir un code plutôt organisé.

Ceci dit, ça ne demande que peu d'efforts pour avoir un code qui ne ressemble pas à un Picasso (désolé). Ça ne demande pas grand chose et si vous vous faites aider par un IDE, c'est encore plus facile. Par exemple, avec Webstorm, vous pouvez configurer tellement de choses dans le formatage de code que ça mâche le boulot pour 50% environ. 80% si vous n'êtes pas exigeants. Après JSLint, JSHint ou ESLint donnent d'excellentes indications pour que tout soit propre une bonne fois pour toutes.

J'ai tendance à croire qu'il en va de même pour Eclipse ou Netbeans, voire Sublime. Désolé pour les éditeurs de texte par contre, pour vous, ça sera à tout à la main. Après tout c'est votre choix.

Pour rappel et pour terminer, même si vous considérez que ce n'est pas nécessaire, n'oubliez pas qu'en JavaScript, le ; est obligatoire. Il fait même partie de la norme 7.9 d'EcmaScript. Quand vous ne les mettez pas, l'interpréteur, que ce soit votre navigateur ou node ou autre, les rajoute en automatique. Autant les mettre et maîtriser ce qu'il se passe avec.

Flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans JavaScript, avec comme mot(s)-clef(s) . Vous pouvez la mettre en favoris avec ce permalien.
  • Rezouce

    Puisque tu cites Bootstrap dans ton article, il y a eu un débat sur un « ; » dans une issue du projet :
    https://github.com/twbs/bootstrap/issues/3057

    D’un côté ceux qui disent que le « ; » ne doit pas être ajouté parce que les navigateurs font parfaitement fonctionner le code et que c’est à JSMin de gérer ce cas.
    De l’autre ceux qui pensent que les développeurs de Bootstrap ne devraient pas se borner autant à respecter leurs règles de styles alors qu’un simple « ; » rendrait le script « minifiable ».

    • http://www.mathieurobin.com/ Mathieu

      Ça a été plus loin que ça en fait, j’ai moi-même participé au débat d’ailleurs. Il y a le problème aussi que fat est plutôt arrogant dans ses réponses et son comportement à ce sujet. Il a peut-être du talent, mais de là à dire que « je connais JavaScript, je sais utiliser les ; donc je ne les utilise pas », c’est un peu prétentieux. Voir ici http://www.wordsbyf.at/2011/10/31/i-dont-write-javascript/

      Ceci dit, son code est minifiable même sans les ;. Juste que tu vas te manger un max de warnings que lui préfère désactiver. Il est vrai que ne pas tenir compte des warnings à toujours été une politique des plus viables.

      Et dire que les navigateurs gèrent très bien l’absence de ; et savent tous y palier, je réponds simplement : http://www.wtfjs.com/

  • Guillaume Spera

    Salut,

    Si jamais vous travaillez sans ‘;’, et qu’il arrive qu’une personne de votre équipe utilise un formatage des scopes (ou accolades) particulier, il est possible que vous tombiez dans le cas suivant :

    function () {
    return {
    id: 1,
    name: 'toto'
    }
    }

    formaté différemment au niveau des accolades et en laissant le compilateur ajouter les ‘;’, cela donne :

    function ()
    {
    return; // retourne undefined
    { // Code non accessible
    id: 1,
    name: 'toto'
    };
    };

    Voici ma raison pour être strict dans mon développement et ceux des gens avec qui je travaille.

    • http://www.mathieurobin.com/ Mathieu

      Yep.

      Pour ça que j’impose JSLint + JSHint en strict (c’est à dire sans option d’esquive activée) afin d’éviter tout risque. Plus un réglage très spécifique de WebStorm qui permet d’aller encore plus loin. Par exemple avec les constantes à gauche dans les comparaisons, un seul return terminal par fonction maximum, les fonctions trop longues, trop complexes, tout ça…

  • syndrael

    Pour moi il y a le code minifié qui est la résultante d’un code développé..et s’il est développé proprement alors il est maintenable. J’ai eu le même débat à l’époque sur PSR-2 en PHP.
    Et si le minifier retranscrivait en assembleur 😉 ça voudrait dire qu’on autorise le déveloopeur a codé ainsi ? Cette réflexion du ; sur le minifier n’est dû au fait que le code reste ‘globalement’ compréhensible…
    Codonc propre, ça ne nous crame pas les doigts non plus..
    Toujours penser que celui qui relit notre code un serial killer psychopathe !!

Articles liés