Sunfox

Le journal de Sunny Ripert


Mort aux tabulations

\t

Le signe tabulation en informatique est utilisé pour aligner du texte ou indenter du code. Mais c’est un caractère perfide : dans un environnement à chasse fixe c’est le seul caractère qui a décidé de prendre plus de place que les autres.

Et cette taille est variable, jusqu’à même prendre parfois une taille nulle. Elle est d’autant plus variable qu’aucun éditeur ne s’accorde sur la taille maximale que le caractère doit prendre, entre 8 et 2 caractères. Du coup, ça casse l’indentation voulue lorsque l’on décide de l’ouvrir autre part.

Exemple d’alignement avec des tabulations qui font 8 caractères de large au maximum :

Spam	Egg	Yoke
Foo	Bar	Yoke
Whizzey	Bam	Yoke

Le même texte affiché dans un éditeur où les tabulations font 4 de large :

Spam    Egg Yoke
Foo Bar Yoke
Whizzey Bam Yoke

On perd l’alignement choisi et donc le sens des colonnes.

De plus, c’est un caractère invisible. Il n’apparaîtra différent d’un espace que dans certains éditeurs de texte. Or mélangez les deux et vous n’avez pas fini de vous tirez les cheveux, surtout lorsque l’indentation est importante, comme en Python.

Le choix de la taille d’indentation doit être choisi par projet plutôt que de s’adapter aux facéties de chaque développeur. En remplaçant les tabulations avec des espaces, ces problèmes n’ont plus lieu.

Enfin la tabulation est pénible à écrire dans certaines applications—comme dans un navigateur web—car la touche tabulation sert avant tout à passer d’un champ à l’autre.

Articles probablement reliés

10 Commentaires

  1. 1 sphax3d :

    Pas faux tout ça. D’ailleurs, il faudrait que je me mette aux indentations à deux espaces, en espérant que ça reste lisible. Je n’aime plus quand il y a trop de caractères « espace » dans le code.

  2. 2 Antoine :

    Mouais, pour une fois je suis pas vraiment d’accord avec toi.

    dans un environnement à chasse fixe c’est le seul caractère qui a décidé de prendre plus de place que les autres

    C’est complètement logique puisqu’une taille variable est justement le but d’une tabulation. Si on la contraint à entrer dans un espace fixe (et égal à celui de tous les autres caractères), on perd complètement son utilité.

    Et cette taille est variable

    Comme je l’ai dit juste au dessus, c’est le principe, on va quand même pas lui reprocher ça quand même ? :)

    Elle est d’autant plus variable qu’aucun éditeur ne s’accorde sur la taille

    Certe, mais ça se configure presque toujours (en fait, j’ai jamais vu un éditeur de code digne de ce nom qui ne le permet pas), donc au même titre que la coloration syntaxique, que les types de retour de lignes, ou même de l’encodage utilisé dans les fichiers, c’est une convention que doit adopter chacun des développeurs d’un projet. Il doit donc de toute manière configurer son éditeur pour s’y conformer.

    Le choix de la taille d’indentation doit être choisi par projet plutôt que de s’adapter aux facéties de chaque développeur. En remplaçant les tabulations avec des espaces, ces problèmes n’ont plus lieu.

    Je suis d’accord, avec les deux phrases. J’ajouterais en plus qu’en remplaçant les espaces par des tabulations, le problème disparait aussi.

    En tant que développeur Python, comme tu le dis, les indentations sont importantes pour moi. J’utilise quasiment que des tabs pour mes projets perso, et je n’ai jamais, mais alors vraiment jamais eu de problèmes d’indentation avec. J’en ai par contre eu plein avec d’autres projets qui utilisaient des espaces. Cependant je met ça sur le compte de mes habitudes, et ça sera un peu la conclusion de mon commentaire.

    Que l’on utilise des tabs ou des espaces, l’important c’est d’utiliser la même chose partout dans son projet. Au final, je pense que d’utiliser l’un ou l’autre, on s’en fout. Je dirais même, en tout franchise, que je trouve les débats sur le sujet complètement sans intéret (c’est pourtant un débat très développé sur la toile). D’autant plus que trouver des arguments fallacieux pour l’un ou l’autre des solutions est plutôt facile. Tiens, par exemple, tu t’étais rendu compte qu’en utilisant des 4 espaces au lieu d’une tab, que tu utilisais 4 fois plus d’espace sur le disque pour tes indentations ? T’imagines, si tous les développeurs utilisaient des tabs, les économies d’espaces disque, et donc d’énergie que ça ferait ??! :)

  3. 3 BatchyX :

    dans un environnement à chasse fixe c’est le seul caractère qui a décidé de prendre plus de place que les autres.

    Le caractère fin de ligne doit prendre bien plus d’espace qu’une bête tabulation, sans compter tout les autres caractères de contrôles …

    Et cette taille est variable

    Non elle ne l’est pas. Une tabulation, c’est 8 caractère, et seul les damnés ont besoin de changer cette taille.

    Et je vois absolument pas l’intérêt de remplacer une tabulation par 8 espaces. C’est un vrai gachi, et c’est chiant à naviguer avec les éditeurs pourris.

    Et si on ne supporte pas les 8 espaces ou la tabulation parce qu’on n’a soit disant besoin de plus de 5 niveaux d’indentations, alors je vous suggère plutôt d’apprendre à coder et à apprendre le concept de fonction.

    Personnellement, avoir une tabulation de 8 espace, ça permet de rendre mon indentation plus expressive. Les lecteurs ne se poseront pas de question sur pourquoi j’ai indenté entre un lock et un unlock ou d’autres paire d’opération.

    Il n’apparaîtra différent d’un espace que dans certains éditeurs de texte. Or mélangez les deux et vous n’avez pas fini de vous tirez les cheveux, surtout lorsque l’indentation est importante, comme en Python.

    Un bon travailleur à d’abords de bon outils, et seul les mauvais travailleurs blâment leurs outils.
    surtout que la mode en ce moment c’est les espaces insécables en plein milieu du code, généralement avant les caractères qui nécessitent d’appuyer sur AltGr. J’ai rencontré plus de problème avec ce genre de chose qu’avec des mix de tab et d’espaces.

    Quand à mélanger des tabulations et des espaces, ça m’est jamais arrivé, vu que c’est à mon éditeur de texte d’indenter pour moi.

    Le choix de la taille d’indentation doit être choisi par projet plutôt que de s’adapter aux facéties de chaque développeur. En remplaçant les tabulations avec des espaces, ces problèmes n’ont plus lieu.

    Foutaises. Pour régler les problèmes d’indentation, la solution, c’est les modelines et companies. Ça permet en plus d’éviter aux gros idiots de faire du mix du style une indentation = 4 espace et deux = une tabulation, parce qu’ils ne savent pas configurer leurs outils.

  4. 4 BatchyX :

    Elle est vraiment bien planquée ta prévisualisation. Tu peux pas la mettre au dessus ?

  5. 5 Sunny :

    @Sphax3d : <3

    @NaPs : Je suis d’accord avec toi.

    mais ça se configure presque toujours (en fait, j’ai jamais vu un éditeur de code digne de ce nom qui ne le permet pas)

    Mais il n’y a pas que les éditeurs, il y a les lecteurs. Ton navigateur, par exemple affiche des tabulations de taille 8 maximum quand tu affiche la source de la page, et il n’y a pas de moyen de le configurer. Même, c’est dans la spécification HTML que &#09; doit faire 8 chars au maximum.

    Il y a tous les outils intermédiaires également. Aujourd’hui c’est un caractère qu’on ne peut produire que dans un éditeur de texte, ce qui le rends limité.

    Si, comme tu le dis, cela reviens au même, utilisons les espaces qui sont uniformes, faciles à produire partout, non-équivoques.

    @BatchyX : Mauvais travailleur damné toi-même. J’ai remonté un peu la prévisualisation.

  6. 6 Louis :

    En python il est vrai que ça ne doit pas poser de problèmes d’utiliser les tabulations. Cependant l’exemple de l’auteur me paraît pertinent, sauf preuve du contraire, lorsqu’il s’agit d’utiliser les tabulations pour émuler des colonnes.

    De mon côté, j’ai résolu le dilemme avec TextMate, en demandant des tabulations de taille, de type espaces — je presse tab, mais l’éditeur insert 3 espaces, et navigue au clavier comme s’il s’agissait d’une tabulation.

  7. 7 Mr Peer :

    Je viens en rajouter une couche pour dire que je suis aussi de ceux qui pensent que le problème ne vient pas du caractère mais de l’éditeur (ou lecteur) :p

  8. 8 Sunny :

    @Mr Peer : doit-on ajouter une option dans tous les éditeurs de textes ? Tous les lecteurs de texte ? toutes les GUI acceptant du texte ? Changer la spec. HTML 4.01 ? Est-ce que sur chaque site web acceptant du texte—comme là dans mes commentaires—l’on doit rajouter un champ input « taille de vos tabulations s’il vous plaît » ? Doit-on par dessus tout changer la touche qui permets de changer de champ de formulaire pour pouvoir insérer des tabulations ?

  9. 9 BatchyX :

    Cependant l’exemple de l’auteur me paraît pertinent, sauf preuve du contraire, lorsqu’il s’agit d’utiliser les tabulations pour émuler des colonnes.

    Dans ce cas la, ça ne viens pas ni du caractère ni de l’éditeur, ça viens d’un mauvais choix de format de fichier. Si t’a besoin d’un document avec des tableaux, c’est pas du texte brut qui faut utiliser. Rien dans un fichier de texte brut indique qu’il faut forcement utiliser une police de largeur fixe, donc rien n’indique que de toute façon les colonnes seront alignées.

    Et c’est encore plus vrai avec un site web : si tu demande à tes utilisateurs de taper un  »tableau » comme ça dans un formulaire, alors ce n’est pas la tabulation qu’il faut critiquer.

    Le texte brut n’a aucune garantie d’encodage, de fin de ligne et de taille de tabulation (même si autre chose que 8 est une hérésie). Si ça te gène, change de format.

  10. 10 mysterty :

    @louis est encore l’exemple que les tabulations > espaces puisqu’il utilise lui 3 espaces… ce qui n’est vraiment pas courant…

    @sunny, ton exemple est faux. En plus de ce qu’a dit Batchy, j’ajouterais que les tabulations sont faites pour indenter. Pas pour aligner. Dans ton exemple, tu alignes, donc tu dois utiliser des espaces.

    exemple correcte :

    __function truc(param 1,
    __..............param 2) { // on aligne les paramètres via des espaces derrière la tabulation d'indentation
    ____action
    __}

Commenter


Vous pouvez avoir une jolie icône vous aussi en créant un gravatar.

Vous pouvez y saupoudrer de l'HTML5 avec les balises et suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>.


:D Sunny Ripert

est un développeur web vivant à Paris.

CV, me contacter


Textes et contenus sous licence Creative Commons.
Site crée par mes soins et propulsé par WordPress.