af83

Javascript, question de style (suite)

DKK_0928

Pour faire suite au précédent billet Javascript, question de style, je vous propose d'étudier une nouvelle tendance : les virgules en début de ligne.

Quand on souhaite écrire un objet javascript un peu long ou un tableau, il n'est pas rare de vouloir faire cela sur plusieurs lignes. Avec la méthode classique (dans le style de JSON.stringify), on obtient :

var o = {
    a : "ape",
    b : "bat",
    c : "cat",
    d : "dog",
    e : "elf",
    f : "fly",
    g : "gnu",
    h : "hat",
    i : "ibu"
  },
  a = [
    [ "ape", "bat" ],
    [ "cat", "dog" ],
    [ "elf", "fly" ],
    [ "gnu", "hat" ],
    [ "ibu" ]
  ];

Mais certaines personnes préfèrent utiliser un autre style, dont Ryan Dahl, le créateur de Node.js. Ils placent les virgules en début de ligne, comme cela :

var o =
    { a : "ape"
    , b : "bat"
    , c : "cat"
    , d : "dog"
    , e : "elf"
    , f : "fly"
    , g : "gnu"
    , h : "hat"
    , i : "ibu"
    }
  , a =
    [ [ "ape", "bat" ]
    , [ "cat", "dog" ]
    , [ "elf", "fly" ]
    , [ "gnu", "hat" ]
    , [ "ibu" ]
    ];

Ce style ne respecte pas JSLint, mais il présente plusieurs avantages.

  1. Le premier est la lisibilité : bien que ce soit, en partie, une question de goût et d'habitude, placer les virgules en début de ligne permet d'avoir des colonnes bien alignées et a un coté structurant.

  2. Cela a également un effet positif sur les diffs : quand on ajoute une nouvelle ligne, il n'y a pas besoin de modifier la ligne précédente pour ajouter une virgule. Ainsi, le diff généré pour cet ajout est plus court, plus facile à relire lors d'une revue de code et permet de conserver l'auteur de la ligne précédente sur un <git|svn|hg> blame.

  3. Enfin, l'argument le plus important est la fiabilité. Avec le style classique, oublier une virgule peut passer inaperçu mais avoir des effets de bord difficile à détecter. Typiquement, cela peut avoir une influence sur la portée des variables, et on se retrouve avec le risque de modifier des variables globales par inadvertance. Il sera beaucoup plus difficile d'oublier une virgule si celles-ci sont placées en début, car cela rompt le rythme vertical. Un petit exemple pour illustrer cela :

var a = "ape"
  , b = "bat"
  , c = "cat"
  , d = "dog"
  e = "elf"
  , f = "fly"
  , g = "gnu"
  , h = "hat"
  , i = "ibu"
  ;

Isaac Z. Schlueter a formalisé ce nouveau style sur un gist. Et vous, lecteurs, que pensez-vous de ce nouveau style ?

blog comments powered by Disqus