2007-02-11

I love U+0009

Dans de nombreux langages de programmation où l'on pratique l'indentation de blocs de code, comme le C++, le PHP ou le Cobol Vénusien, deux écoles s'affrontent quant à la manière de matérialiser ces indentations : ceux qui indentent avec une succession d'espaces, et ceux qui indentent à l'aide de tabulations. J'appartiens à cette dernière catégorie pour différentes raisons que j'expose ici.

Créez du sens

Quand je place une tabulation en début d'un bloc de code, c'est un moyen pour moi de signifier que j'ai une indentation, tout en faisant abstraction de la manière d'afficher cette indentation. J'aurai le respect d'une relation simple : une indentation <--> une tabulation. Je n'aurai pas gérer des fractions d'indentation qui n'ont pas de sens. Je réserve ça à l'ascii-art ^^

Optimisation

Quand on écrit ou quand on lit du code, comment traverser un ou plusieurs niveaux d'indentation à l'aide du clavier ?

Avec un code à espaces, je vais devoir:

  • déterminer, en regardant le code que j'ai sous les yeux, combien d'espaces sont utilisées pour une indentation (3 ? 4 ? 5 ? 8 ?)
  • appuyer un nombre de fois sur les touches fléchées égal au nombre d'indentations multiplié par le nombre d'espaces utilisé par le développeur dont je relis le code. C'était combien déjà ? Euh... 4 je crois... là j'ai 2 niveaux d'indentation ça fait donc 8 espaces. Bon, 8... Alors, touche fléchée. Un, deux, trois, quatre, cinq, six, sept, huit ! J'ai enfin atteint mes deux malheureux niveaux d'indentation :p

Au niveau de la réflexion, et au niveau du geste, il y aura cette perte de temps. Un désagrément faible, certes, mais pourquoi passer par là quand il y a plus direct ? Avec des tabulations, je n'ai pas à déterminer le nombre d'espaces par indentation.

Indépendamment de la représentation qu'en faisait l'auteur, si ce dernier souhaitait signifier deux niveaux d'indentation, il aura mis deux tabulations, et moi je n'aurai qu'à appuyer deux fois sur ma touche fléchée. Je consacre ainsi mon temps, mes neurones et mes articulations à des tâches plus nobles.

Et pour supprimer un ou plusieurs niveaux d'indentation ? Les remarques sont les mêmes que pour traverser du code, mais cette fois-ci en prenant en compte les touches Suppr et Backspace. Suppr, Suppr, Suppr, Suppr, Suppr, Suppr... Backspace, Backspace, Backspace... Zzz... Ai-je pensé à payer mon 3e tiers ?

Le gout des autres

Certains préfèrent une largeur de 3 EM, d'autres de 4, d'autres de 8... En utilisant des tabulations, je respecte le choix de chaque utilisateur de mon code, qui pourra configurer son éditeur de texte avec sa largeur préférée. En utilisant des espaces, j'imposerais mon choix aux autres, provoquant chez eux frustration, colère et empoisonnement à l'arsenic. On avance plus vite avec une équipe vivante.

Vie du code

En utilisant des espaces, on se retrouve souvent dans le code avec des blocs alignés sur rien, ou des blocs utilisant d'autres nombres d'espaces par indentation (exemple de copier coller d'un code tiers). La perte d'homogénéité sera moins probable avec des tabulations, puisqu'il n'y a aucune chance de placer un bloc sur des fractions d'indentation.

À noter que je ne parle dans ce billet que des indentations de blocs. Je ne parle pas des autres types d'alignements qui ne sont là que pour décorer. À ce titre, l'espace peut être utilisé puisqu'on entre alors dans un domaine purement visuel et non plus sémantique.

Mmh, un donut !

En aparté, j'aimerais revenir sur le point « respect des choix de l'utilisateur ». J'entends souvent les partisans de l'indentation par espace défendre leur choix pour exactement cette même raison. On entre alors dans un débat impliquant des aspects liés à la personnalité :

  • êtes vous du genre à imposer vos gouts aux autres ?
  • êtes vous du genre à trouver un moyen de satisfaire tout le monde ?

On sort du cadre de l'informatique, pour rejoindre des concepts plus généraux. On ne peut plus se baser ni sur sur logique ni sur la technique, on rentre dans une sphère purement subjective. Dans cette sphère là, j'ai appris à laisser le choix aux gens. J'aime que ma tabulation fasse 4 EM de large mais peu m'importe si Riri, Fifi ou Jean-Pierre utilisent 8 EM. Tout le monde y gagne.

Voilà pourquoi les deux méthodes d'indentation continuent d'exister, une part du choix se basant sur des aspects purement subjectifs.

De mon temps on codait au silex

Quand j'ai débuté à programmer réellement, à la bonne époque de l'assembleur 680x0 sur Amiga, j'avais l'habitude de faire mes indentations à l'aide d'espaces. C'est un programmeur plus expérimenté que moi, avec lequel j'échangeais des disquettes par la poste (pas d'Internet à l'époque !), qui avait l'habitude d'utiliser des tabulations. Pris de curiosité, j'ai commencé à gouter à cette méthode d'indentation, et pour toutes les raisons que j'évoque dans ce billet, je ne suis plus jamais revenu en arrière :)