Pourquoi la fin des espaces blancs est-elle une grosse affaire? [fermé]

116

Les espaces de fin sont un problème suffisant pour les programmeurs car les éditeurs tels qu'Emacs ont des fonctions spéciales qui le soulignent ou le suppriment automatiquement, et de nombreuses normes de codage exigent que vous en éliminiez toutes les occurrences. Je ne sais pas trop pourquoi. Je peux penser à une raison pratique d’éviter les espaces inutiles: si les utilisateurs ne le font pas avec prudence, ils peuvent le modifier entre deux commits, puis nous obtenons des différences polluées par des lignes apparemment inchangées, simplement parce que ajouté un espace.

Cela semble déjà être une bonne raison de l'éviter, mais je veux voir s'il y a plus que cela. Alors, pourquoi est-ce que traîner les blancs est un si gros problème?

EpsilonVector
la source
30
Le suivi des espaces est bien un bruit de fond. Je ne peux penser à aucune autre raison.
Yannis
17
Un bon outil de diff devrait pouvoir ignorer les espaces en fin de texte (et en tête également, si vous le souhaitez). Après tout, Emacs peut le faire, pourquoi pas vos outils de diff?
FrustratedWithFormsDesigner
4
Naviguer jusqu'à la fin de la chaîne avec le bouton 'Fin' peut être compliqué avec beaucoup d'espaces de fin.
Iarek Kovtunenko
11
Je pense que vous posez la question dans le mauvais sens. L’inverse est: «quels sont les avantages de la traînée d’espaces blancs? » La réponse devient assez évidente quand on pose la bonne question;)
deadalnix
7
Peut-être devriez-vous essayer de programmer en espace . * 8 ')
Mark Booth

Réponses:

76

Raisons que c'est important pour moi:

  • Lorsque je clique sur la touche "Fin", je m'attends à ce que le curseur se positionne à la fin de la ligne (en fonction de l'éditeur que j'utilise et de sa configuration) et j'espère pouvoir commencer à taper tout de suite. Si le curseur y arrive et que je dois supprimer 3 ou 4 caractères, c'est embêtant. Surtout s'il y a incompatibilité dans le (s) fichier (s).

  • Lorsque des littéraux de chaîne recouvrent plusieurs lignes, les espaces de fin peuvent donner à la chaîne en sortie un aspect incorrect lorsqu'elle est utilisée.

Bien qu’il ne s’agisse pas strictement de programmation, les espaces peuvent gâcher sérieusement la saisie des données s’il existe un fichier de fin / tête dans un fichier qui sera analysé et utilisé comme autre chose. C'est ce qui se produit le plus souvent lorsqu'un fichier d'entrée généré propre est souillé par quelqu'un qui le modifie dans Excel ou quelque chose de ce type, puis les espaces de fin (et autres problèmes de formatage) peuvent s'y glisser.

FrustratedWithFormsDesigner
la source
8
Le point 1 est un problème avec votre éditeur, pas avec l'espace blanc de fin.
Marjan Venema
33
@MarjanVenema: Oui, un éditeur peut être conçu pour accéder au dernier espace non-blanc, mais vous ne saurez alors jamais quel est le dernier espace (sauf si cela est indiqué d'une autre manière - je trouverais probablement aussi étrange que FIN ne ne pas aller en fin de ligne, ce que je suis habitué). Ce qui poserait un problème avec les littéraux multi-lignes. L’éditeur doit donc savoir que, dans un littéral de chaîne multiligne, END doit aller au dernier caractère, y compris les espaces. L'éditeur que j'utilise n'est pas si malin.
FrustratedWithFormsDesigner
2
J'ajouterais que la sélection avec la souris est difficile à faire sans la sélection d'espaces supplémentaires et cela peut avoir de l'importance s'il s'agit d'une pâte coupée. Ou qu'il génère du bruit lors de la validation (éventuellement de la configuration!) Pour rien. Pas très grave, mais beaucoup de petites anoyances. Cela donne l'impression que l'ancien développeur était paresseux et s'attendait à ce que vous partiez dans son pétrin.
deadalnix
1
@deadalnix: bien sûr, c'est pourquoi vous avez besoin d'un bon éditeur avec des options adaptées aux préférences de la plupart des gens. Et donc le point 1 est un problème avec l'éditeur et pas l'espace blanc final.
Marjan Venema
1
Le point 1 est précisément la raison pour laquelle je préfère avoir un style particulier de fin d’espace: les lignes vides sont en retrait avec le code qu’elles séparent. Cela permet d’insérer immédiatement un nouveau code sans avoir à
indenter
29

Je déteste vraiment traîner les espaces, 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 publication assistée par ordinateur. Avez-vous déjà eu un document dactylographié par quelqu'un d'autre qui devait être composé dans une publication? Dans toutes les publications modernes, en particulier lors de l'utilisation de colonnes, il est d'usage de faire en sorte que les phrases se succèdent dans un paragraphe, sans créer de nouvelle ligne pour chaque phrase. Eh bien, quand il y a des espaces à la fin, il faut beaucoup plus d'efforts pour bien faire les choses (beaucoup d'actions de recherche et de remplacement qui éliminent les doubles espaces, etc.).

Autres raisons (en programmation), ce ne sont pas de bonnes raisons, je le sais, mais elles dérangent mon psychisme subconscient de manière si aggravante et intense qu'elles m'obligent à l'éliminer:

  • Cela prend plus d'espace de stockage que nécessaire
  • L'analyseur devra sauter 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 correspond pas.

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

La dernière raison à laquelle je peux penser est un mouvement de curseur incohérent. On a l'impression que le curseur est suspendu dans les airs à la fin d'une ligne. Chaque pas à droite peut le faire chuter ou le faire glisser plus loin encore, il semble instable (comme ces blocs invisibles ou en train de disparaître que Super Mario sautait dessus).

Probablement que je peux être diagnostiqué avec trailpacefobia?

Louis Somers
la source
Ce n'est pas mon domaine, mais cela me semble étrange ... Quel type de système de composition utilisez-vous ici dans la publication assistée par ordinateur, qui n'ignore pas les espaces de fin / multiples par défaut ? Je pensais que la manière dont LaTeX et la plupart des langages de programmation fonctionnaient était standard partout, sauf dans le courrier indésirable WYSIWYG au niveau du consommateur.
gauche du
Adobe InDesign (cela relève-t-il également de la malbouffe WYSIWYG au niveau du consommateur?). Oui, il ignorera les espaces de fin, mais remplacera tous les sauts de ligne par des espaces dans un paragraphe et vous obtiendrez des espaces doubles (qui ne sont pas ignorés). Un remplacement supplémentaire est nécessaire pour les éliminer.
Louis Somers
La "publication assistée par ordinateur" n’est pas quelque chose que vous faites avec un "système de composition".
Rakslice
22

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

Vim est conçu pour que les actions courantes correspondent aux lettres de manière si nette que vous n’aurez même pas à vous demander quelle lettre ou combinaison de touches utiliser. Divers raccourcis clavier permettent au curseur de contourner le texte si rapidement qu'il ne faut que quelques frappes pour le faire où vous le souhaitez. Même des choses comme plier des blocs de code sont rapides, puisque vous pouvez appuyer sur FIN ou sur $ pour sauter à la fin de la ligne, où le curseur doit se chevaucher {ou} ou (ou) ou quelque chose - il n'y a pas besoin de casser votre flux de pensée à avoir une idée sur l'écran.

Mais ensuite, certains espaces traînent, 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’affichage du curseur. Vous devez donc interrompre votre pensée pour l’envoyer là où il devrait être.

Avez-vous déjà remarqué à quel point les gens sont agacés quand ils sont vraiment concentrés sur une tâche et que quelqu'un les interrompt? Ouais, trouver le dernier espace quand c'est le moins prévu est exactement comme ça.

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

Izkata
la source
2
En résumé, la vitesse de frappe n'a rien à voir avec l'utilisation de votre souris pour la navigation ou non. Certaines navigations conviennent parfaitement à une souris. ; p
Steven Jeuris
2
Si vous utilisez vim, vous pouvez rapidement supprimer tous les espaces finaux:%s/ *$//
Giorgio
1
@Giorgio Je sais, mais je ne peux pas le faire à tout moment parce que cela compte comme un changement de contrôle de version
Izkata
@izkata: Vrai. Je reformate les fichiers que je dois modifier avant de les archiver, mais la bataille est perdue si d'autres développeurs continuent à archiver des fichiers avec des espaces finaux.
Giorgio
17

De manière surprenante, la réponse la plus évidente fait défaut: les espaces de fuite peuvent et vont produire des bugs difficiles à trouver.

La situation la plus évidente est celle des chaînes multilignes. Python, JavaScript et Bash ne sont que quelques exemples des langages concernés:

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 caractères d'espacement.

La mise en surbrillance de la syntaxe peut aider à éviter de tels cas, mais il est encore plus facile de ne pas avoir le problème en premier lieu en ne laissant pas d'espace blanc à la fin des lignes. C'est pourquoi certains vérificateurs de style émettent un avertissement lorsqu'ils rencontrent des espaces, et certains éditeurs les découpent automatiquement.

entrez la description de l'image ici

Illustration: la syntaxe en surbrillance peut aider à éviter les espaces blancs dans les situations où cela peut conduire à des bogues, mais ne vous fiez pas uniquement à cela.

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

Par exemple, les fichiers CSV contenant des espaces de fin peuvent entraîner une incohérence des données, ce qui est également très difficile à détecter: des analyseurs syntaxiques conformes aux normes vont supprimer les espaces (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), mais certains analyseurs peuvent mal se comporter et conserver les espaces comme faisant partie d'une valeur.

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

Arseni Mourzenko
la source
14

J'ai récemment passé une journée à rechercher un bogue qui se révélait être un espace de fin inattendu derrière les données.

Ddyer
la source
13
Je pense que c'est un bug; le traitement de code des entrées générées par l’homme devrait éliminer les espaces blancs de fin, et souvent les espaces blancs les plus importants devraient également être ignorés.
Kevin Cline
@ kevincline - Cela devrait être au moins. Si ce n'est pas visible sur l'écran ou sur l'impression, je ne veux pas y penser.
Rook
6
Parce que vous avez passé une journée à rechercher un bogue, les espaces à la fin sont une grosse affaire? Veuillez modifier votre réponse pour qu'elle soit plus générale que cela. Ajoutez un peu d’arrière-plan, une argumentation,… Personnellement, je n’ai jamais eu de problèmes de fond d’espace, mais je n’utilise pas cela pour conclure qu’ils ne posent pas non plus de problème.
Steven Jeuris
2
@Steven Les espaces en fin de chaîne ont provoqué un bogue difficile à détecter. Cela me semble une bonne réponse. Vous pouvez imaginer à quel point certains codes d’analyse de données pourraient casser dans cette situation.
Will Sheppard
J'ai supprimé les espaces à la fin des données et maintenant un test échoue. Vous êtes responsable de cela. Quel est ton nom? Où dois-je envoyer la facture?
Thomas Weller
8

Lorsque je sélectionne le code source du programme afin de le copier / coller (ou de le supprimer), je trouve un peu gênant de voir tout l'espace extra blanc irrégulier à la fin des lignes: je dois lire le code pendant que je le sélectionne. , l'espace blanc de fuite 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.

Giorgio
la source
7

Outre le problème évident que cela casse l'analyse dans certains cas? Comme l'a noté une autre affiche, cela peut entraîner des erreurs subtiles et difficiles à retracer. Les espaces ne sont pas toujours insignifiants. Dans certains cas, les espaces finaux peuvent modifier de manière significative la signification d’une ligne de code ou de données.

Dans la plupart des cas, les espaces sont là pour formater le code pour les lecteurs humains. Les espaces de fin 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 elles peuvent entraîner un fonctionnement incorrect, et une autre peut rendre plus difficile la compréhension du code.

BillThor
la source
4

Il existe des langages de programmation sensibles aux espaces finaux. Par exemple, un script TCL générera une erreur s'il y a un espace à la fin d'une ligne.


la source