web-dev-qa-db-fra.com

Pourquoi la fuite des espaces blancs est-elle si importante?

La fin des espaces blancs est un problème pour les programmeurs que les éditeurs comme Emacs ont des fonctions spéciales qui le mettent en évidence ou s'en débarrassent automatiquement, et de nombreuses normes de codage vous obligent à en éliminer toutes les instances. Je ne sais pas vraiment pourquoi. Je peux penser à une raison pratique d'éviter les espaces inutiles, et c'est que si les gens ne font pas attention à l'éviter, ils peuvent le changer entre les commits, puis nous obtenons des différences polluées avec des lignes apparemment inchangées, simplement parce que quelqu'un a supprimé ou ajouté un espace.

Cela semble déjà être une assez bonne raison de l'éviter, mais je veux voir s'il y a plus que cela. Alors, pourquoi la fuite des espaces blancs est-elle si importante?

120
EpsilonVector

Raisons pour lesquelles c'est important pour moi:

  • Lorsque j'appuie sur la touche "Fin", je m'attends à ce que le curseur atteigne la fin de la ligne (en fonction de l'éditeur que j'utilise et de la façon dont il est configuré) et je m'attends à pouvoir commencer à taper immédiatement. Si le curseur arrive et que je dois supprimer 3 ou 4 caractères, c'est ennuyeux. Surtout si elle est incohérente tout au long des fichiers.

  • Lorsque j'ai des littéraux de chaîne qui s'étendent sur plusieurs lignes, les espaces de fin peuvent rendre la chaîne de sortie incorrecte lorsqu'elle est utilisée.

Bien qu'ils ne soient pas strictement programmés, les espaces blancs peuvent sérieusement gâcher la saisie de données, s'il y a un suivi/début dans un fichier qui sera analysé et utilisé comme entrée pour autre chose. Cela se produit le plus souvent lorsqu'un fichier d'entrée généré et propre est sali par quelqu'un qui le modifie dans Excel ou quelque chose et que les espaces de fuite (et autres problèmes de formatage) peuvent s'introduire.

Je déteste vraiment les espaces vides, mais la raison exacte est un peu vague.

Je suppose que l'origine de ce sentiment n'est pas dans la programmation, mais dans le domaine de la PAO. Avez-vous déjà eu un document dactylographié par quelqu'un d'autre qui devait être mis en page dans une publication? Dans toutes les publications modernes, en particulier lors de l'utilisation de colonnes, il est personnalisé de faire en sorte que les phrases se suivent séquentiellement dans un paragraphe, sans commencer une nouvelle ligne pour chaque phrase. Eh bien, quand il y a des espaces à la fin, il faut beaucoup plus d'efforts pour le faire correctement (beaucoup de recherches et d'actions de remplacement qui éliminent les doubles espaces, etc ...).

D'autres raisons (en programmation), pas de bonnes raisons, je sais, mais elles dérangent ma psyché subconsciente d'une manière tellement aggravante qu'elles m'obligent à l'éliminer:

  • Il prend plus d'espace de stockage que nécessaire
  • L'analyseur devra ignorer un caractère supplémentaire sans raison valable lors de la compilation
  • Certains éditeurs peuvent ajouter une ligne vierge supplémentaire lorsque WordWrap est activé et que l'espace de fin ne convient pas

Oui oui je sais! Je sais, ce sont des raisons indésirables. Je ne suis pas perfectionniste, mais ... enfin peut-être que je le suis?

La dernière raison à laquelle je peux penser est le mouvement incohérent du curseur. On a l'impression que le curseur est suspendu dans le vide à la fin d'une ligne, chaque pas vers la droite peut le faire tomber ou planer plus loin dans une mesure inconnue, il se sent juste instable (comme ces blocs invisibles ou disparus que Super Mario avait l'habitude de sauter dessus).

Je peux probablement recevoir un diagnostic de trailpacefobia?

29
Louis Somers

Beaucoup de ces réponses presque touchent à la raison pour laquelle c'est mauvais pour moi, mais en gros: ça "casse" les éditeurs de texte. Mon expérience est avec vim.

Vim est conçu pour que les actions courantes soient mappées aux lettres de façon si nette que vous n'avez même pas à penser à la lettre ou à la combinaison de touches à frapper. Divers raccourcis clavier permettent au curseur de parcourir le texte si rapidement qu'il suffit de quelques touches pour le déplacer où vous le souhaitez. Même des choses comme le pliage de blocs de code est rapide, car vous pouvez appuyer sur END ou $ pour passer à la fin de la ligne, où le curseur doit se chevaucher {ou} ou (ou) ou quelque chose - il n'y a pas besoin de rompre votre flux de pensée pour avoir une idée à l'écran.

Mais vient ensuite un espace blanc arrière, et les mouvements du curseur ne sont plus prévisibles. Votre processus de frappe est interrompu car quelque chose que vous ne pouvez pas voir affecte l'endroit où va le curseur, vous devez donc rompre avec votre pensée pour l'envoyer là où il devrait être.

Avez-vous déjà remarqué à quel point les gens sont ennuyés lorsqu'ils sont vraiment concentrés sur une tâche et que quelqu'un les interrompt? Ouais, trouver un espace de fuite au moment le moins attendu est exactement comme ça.

En tant que sidenote, j'ai également remarqué que les personnes qui ne se soucient pas des espaces de fuite sont celles qui utilisent la souris pour la navigation, et ont tendance à être des dactylographes plus lents à cause de cela ...

22
Izkata

Étonnamment, la réponse la plus évidente est manquante: les espaces de fuite peuvent et vont produire des bogues difficiles à trouver.

La situation la plus évidente est celle des chaînes multilignes. Python, JavaScript et Bash sont quelques exemples des langages qui peuvent être affectés par ceci:

print("Hello\·
····World")

produit:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

ce qui est en quelque sorte cryptique et difficile à résoudre si l'éditeur n'est pas configuré pour afficher des espaces blancs.

Alors que la mise en évidence de la syntaxe peut aider à éviter de tels cas, il est encore plus facile de ne pas avoir le problème en premier lieu en ne laissant pas d'espace à la fin des lignes. C'est pourquoi certains vérificateurs de style émettront un avertissement lorsqu'ils rencontreront des espaces de fin, et certains éditeurs les couperont automatiquement.

enter image description here

Illustration: la mise en évidence de la syntaxe peut aider à éviter les espaces vides dans les situations où elle peut entraîner des bogues, mais ne vous fiez pas uniquement à elle.

Un autre contexte, brièvement mentionné dans ne réponse précédente , est les données stockées dans des fichiers.

Par exemple, les fichiers CSV qui contiennent des espaces de fin peuvent entraîner une incohérence des données qui est également très difficile à détecter: les analyseurs conformes aux normes coupent l'espace (la norme indique que les espaces de début ou de fin ne sont pas pertinents, sauf s'ils sont délimités par des guillemets doubles), mais certains analyseurs peuvent mal se comporter et conserver l'espace en tant que partie d'une valeur.

D'autres formats personnalisés peuvent spécifiquement considérer que les espaces blancs font partie de la valeur, ce qui conduit à des situations cohérentes mais toujours difficiles à déboguer.

17
Arseni Mourzenko

J'ai récemment passé une journée à chercher un bug qui s'est avéré être un espace de fuite inattendu dans les données.

14
ddyer

Lorsque je sélectionne le code source du programme pour le copier-coller (ou le supprimer), je trouve un peu ennuyeux de voir tous les espaces blancs supplémentaires irréguliers à la fin des lignes: puisque je dois lire le code pendant que je le sélectionne , l'espace blanc arrière est un bruit inutile. Exemple (les points représentent l'espace blanc):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

Cet exemple est artificiel, mais j'ai vu beaucoup de code qui ressemble à ceci.

8
Giorgio

Outre le problème évident qu'il rompt l'analyse dans certains cas? Comme l'a noté une autre affiche, cela peut provoquer des erreurs subtiles et difficiles à retracer. Les espaces blancs ne sont pas toujours insignifiants. Dans certains cas, un espace de fin peut modifier considérablement la signification d'une ligne de code ou de données.

Dans la plupart des cas, un espace est disponible pour formater le code pour les lecteurs humains. Les espaces vides peuvent indiquer plusieurs éléments, notamment:

  • Une déclaration incomplète;
  • Un commentaire manquant;
  • Un montage erroné; ou
  • Édition bâclée.

Deux d'entre eux peuvent entraîner un fonctionnement incorrect et un autre peut rendre la compréhension du code plus difficile.

7
BillThor

Il existe des langages de programmation qui sont sensibles aux espaces blancs de fin de ligne. Par exemple, un script TCL donnera une erreur s'il y a un espace à la fin d'une ligne.

4
user81965