Warum ist der nachgestellte Leerraum eine große Sache? [geschlossen]

116

Das nachgestellte Leerzeichen ist für Programmierer ein Problem, da Editoren wie Emacs spezielle Funktionen haben, die es hervorheben oder automatisch entfernen, und viele Codierungsstandards erfordern, dass Sie alle Instanzen davon entfernen. Ich bin mir nicht ganz sicher warum. Ich kann mir einen praktischen Grund vorstellen, unnötige Leerzeichen zu vermeiden, und wenn die Leute nicht aufpassen, dass sie es vermeiden, können sie es zwischen Commits ändern, und dann werden Diffs mit scheinbar unveränderten Zeilen verschmutzt, nur weil jemand oder entfernt hat fügte ein Leerzeichen hinzu.

Das klingt schon nach einem guten Grund, es zu vermeiden, aber ich möchte sehen, ob mehr dahinter steckt. Warum ist das nachgestellte Leerzeichen so wichtig?

EpsilonVector
quelle
30
Das nachgestellte Leerzeichen ist in der Tat ein Commit-Geräusch. Ich kann mir keinen anderen Grund vorstellen.
Yannis
17
Ein gutes Diff-Tool sollte in der Lage sein, abschließende (und auch führende) Leerzeichen zu ignorieren. Immerhin kann Emacs das, warum nicht Ihre Diff-Tools?
FrustratedWithFormsDesigner
4
Das Navigieren zum Ende der Zeichenfolge mit der Schaltfläche "Ende" kann mit vielen nachgestellten Leerzeichen unübersichtlich werden.
Iarek Kovtunenko
11
Ich denke, Sie stellen die Frage falsch. Der andere Weg ist: «Was sind die Vorteile von nachgestellten Leerzeichen? ». Die Antwort wird ziemlich offensichtlich, wenn man die richtige Frage stellt;)
deadalnix
7
Vielleicht sollten Sie versuchen, in Whitespace zu programmieren . * 8 ')
Mark Booth

Antworten:

76

Gründe, die mir wichtig sind:

  • Wenn ich die Taste "Ende" drücke, wird der Cursor voraussichtlich ans Ende der Zeile springen (abhängig davon, welchen Editor ich verwende und wie er konfiguriert ist), und ich erwarte, dass ich in der Lage sein werde, sofort mit der Eingabe zu beginnen. Wenn der Cursor dorthin gelangt und ich 3 oder 4 Zeichen löschen muss, ist das ärgerlich. Vor allem, wenn es in der gesamten Datei (en) inkonsistent ist.

  • Wenn ich Zeichenfolgenliterale habe, die sich über mehrere Zeilen erstrecken, kann ein nachgestelltes Leerzeichen dazu führen, dass die Ausgabezeichenfolge bei Verwendung falsch aussieht.

Obwohl Whitespace nicht streng programmiert ist, kann es die Dateneingabe ernsthaft verfälschen, wenn eine Datei nachgestellt / vorangestellt wird, die analysiert und als Eingabe für etwas anderes verwendet wird. Dies ist am häufigsten der Fall, wenn eine saubere, generierte Eingabedatei durch eine Person verschmutzt wird, die sie in Excel oder einem anderen Format bearbeitet, und sich dann nachfolgende Leerzeichen (und andere Formatierungsprobleme) einschleichen können.

FrustratedWithFormsDesigner
quelle
8
Punkt 1 ist ein Problem mit Ihrem Editor, nicht mit dem nachgestellten Leerraum.
Marjan Venema
33
@MarjanVenema: Ja, ein Editor könnte so konzipiert sein, dass er bis zum letzten Nicht-Leerzeichen geht, aber dann wüsste man nie, dass ein Leerzeichen nachgestellt wird (es sei denn, es wurde auf eine andere Weise angegeben) Ich gehe nicht ans Ende der Leitung, wie ich es gewohnt bin. Das wäre ein Problem mit mehrzeiligen String-Literalen. Dann müsste der Editor wissen, dass in einem mehrzeiligen String-Literal END zum letzten Zeichen einschließlich Leerzeichen gehen sollte. Der Editor, den ich benutze, ist nicht so clever.
FrustratedWithFormsDesigner
2
Ich würde hinzufügen, Auswahl mit der Maus ist schwierig zu tun, ohne zusätzliche Leerzeichen auszuwählen und das könnte von Bedeutung sein, wenn es sich um eine ausgeschnittene Paste handelt. Oder dass es beim Festschreiben (eventuell konfiliert!) Umsonst Rauschen erzeugt. Keine große Sache, aber viele kleine Unannehmlichkeiten. Es gibt das Gefühl, dass der vorherige Entwickler faul war und erwartet, dass Sie in seinem / ihrem Schlamassel gehen.
Deadalnix
1
@deadalnix: Natürlich brauchst du deshalb einen guten Editor mit Optionen, die den Vorlieben der meisten Leute entsprechen. Daher ist Punkt 1 ein Problem mit dem Editor und nicht mit dem nachgestellten Leerraum.
Marjan Venema
1
Punkt 1 ist genau der Grund, warum ich einen bestimmten Stil für abschließende Leerzeichen bevorzuge: Leerzeilen werden mit dem Code eingerückt, den sie trennen. Auf diese Weise kann sofort ein neuer Code eingefügt werden, ohne dass ein Einzug
erforderlich ist
29

Ich hasse es wirklich, Leerzeichen zu schreiben, aber der genaue Grund ist ein bisschen vage.

Ich denke, der Ursprung dieses Gefühls liegt nicht in der Programmierung, sondern im Bereich Desktop Publishing. Haben Sie jemals ein Dokument von jemand anderem geschrieben bekommen, das in eine Publikation eingefügt werden musste? In allen modernen Veröffentlichungen, insbesondere bei der Verwendung von Spalten, ist es üblich, Sätze innerhalb eines Absatzes nacheinander anzuordnen, ohne für jeden Satz eine neue Zeile zu beginnen. Nun, wenn nachgestellte Leerzeichen vorhanden sind, ist viel mehr Aufwand erforderlich, um sie zu korrigieren (viele Such- und Ersetzungsaktionen, die doppelte Leerzeichen beseitigen, usw.).

Andere Gründe (in der Programmierung), keine guten Gründe, ich weiß, aber sie stören meine unterbewusste Psyche auf so erschwerende Weise, dass sie mich zwingen, sie zu beseitigen:

  • Es braucht mehr Speicherplatz als nötig
  • Der Parser muss beim Kompilieren ohne triftigen Grund ein zusätzliches Zeichen überspringen
  • Einige Editoren fügen möglicherweise eine zusätzliche Leerzeile hinzu, wenn WordWrap aktiviert ist und das nachgestellte Leerzeichen nicht passt

Ja Ja ich weiss! Ich weiß, das sind Junk-Gründe. Ich bin kein Perfektionist, aber ... nun, vielleicht bin ich das?

Der letzte Grund, den ich mir vorstellen kann, ist eine inkonsistente Cursorbewegung. Es fühlt sich an, als würde der Cursor am Ende einer Linie in Luft aufhängen. Jeder Schritt nach rechts kann dazu führen, dass er entweder abfällt oder in einem unbekannten Ausmaß weiter schwebt Mario sprang immer drauf).

Wahrscheinlich kann ich mit trailspacefobia diagnostiziert werden?

Louis Somers
quelle
Nicht mein Fachgebiet, aber es kommt mir seltsam vor ... Was für ein Schriftsatzsystem verwenden Sie dort beim Desktop Publishing, bei dem abschließende / mehrere Leerzeichen standardmäßig nicht ignoriert werden ? Ich dachte, dass die Art und Weise, wie LaTeX und die meisten Programmiersprachen dies tun, überall Standard ist, mit Ausnahme von WYSIWYG-Junk auf Verbraucherebene.
Leftaroundabout
Adobe InDesign (fällt dies auch unter WYSIWYG-Junk auf Verbraucherebene?) Es werden nachfolgende Leerzeichen ignoriert, ja, aber alle Zeilenvorschübe werden durch Leerzeichen in einem Absatz ersetzt, und Sie erhalten doppelte Leerzeichen (die nicht ignoriert werden). Dann ist ein zusätzliches Ersetzen erforderlich, um diese zu entfernen.
Louis Somers
"Desktop Publishing" ist nichts, was Sie mit einem "Schriftsatzsystem" tun.
Rakslice
22

Viele dieser Antworten berühren fast den Grund, warum es schlecht für mich ist, aber im Grunde genommen: Es "bricht" Texteditoren. Meine Erfahrung ist mit vim.

Vim ist so konzipiert, dass gängige Aktionen Buchstaben so sauber zugeordnet werden, dass Sie nicht einmal darüber nachdenken müssen, welche Buchstaben- oder Tastenkombination Sie treffen möchten. Verschiedene Hotkeys ermöglichen es dem Cursor, so schnell durch den Text zu springen, dass nur wenige Tastatureingaben erforderlich sind, um ihn an den gewünschten Ort zu bringen. Sogar Dinge wie das Falten von Codeblöcken sind schnell, da Sie END oder $ drücken können, um zum Ende der Zeile zu springen, wo sich der Cursor überlappen sollte (oder) oder (oder) oder so - es ist nicht erforderlich, Ihren Gedankenfluss zu unterbrechen Holen Sie sich eine Idee auf den Bildschirm.

Dann folgt jedoch ein Leerzeichen, und die Bewegungen des Cursors sind nicht mehr vorhersehbar. Ihr Schreibvorgang wird unterbrochen, weil sich etwas, das Sie nicht sehen können, auf die Position des Cursors auswirkt. Sie müssen also Ihren Gedankengang unterbrechen, um ihn dahin zu senden, wo er sein sollte.

Haben Sie jemals bemerkt, wie verärgert Menschen sind, wenn sie sich wirklich auf eine Aufgabe konzentrieren und jemand sie unterbricht? Ja, es ist genau so, abschließende Leerzeichen zu finden, wenn es am wenigsten erwartet wird .

Als Randnotiz ist mir auch aufgefallen, dass Leute, die sich nicht für nachgestellte Leerzeichen interessieren, die Maus für die Navigation verwenden und deswegen in der Regel langsamer tippen ...

Izkata
quelle
2
Als Randnotiz hat die Tippgeschwindigkeit nichts damit zu tun, ob Sie Ihre Maus für die Navigation verwenden oder nicht. Einige Navigation eignet sich perfekt für eine Maus. ; p
Steven Jeuris
2
Wenn Sie vim verwenden, können Sie schnell alle nachfolgenden Leerzeichen entfernen:%s/ *$//
Giorgio
1
@ Giorgio Ich weiß, aber ich kann es nicht jederzeit tun, weil es als Änderung in der Versionskontrolle gilt
Izkata
@izkata: Richtig. Ich formatiere Dateien neu, die ich ändern muss, bevor ich sie einchecke, aber dies ist ein verlorener Kampf, wenn andere Entwickler weiterhin Dateien mit nachgestellten Leerzeichen einchecken.
Giorgio
17

Überraschenderweise fehlt die naheliegendste Antwort: Nachgestellte Leerzeichen können und werden schwer zu findende Fehler verursachen.

Die naheliegendste Situation sind mehrzeilige Zeichenfolgen. Python, JavaScript und Bash sind einige Beispiele für Sprachen, die davon betroffen sein können:

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

produziert:

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

Das ist irgendwie kryptisch und schwierig zu lösen, wenn der Editor nicht für die Anzeige von Leerzeichen konfiguriert ist.

Während Syntax-Hervorhebung dabei helfen kann , solche Fälle zu vermeiden, ist es sogar noch einfacher, das Problem nicht an erster Stelle zu haben, indem Leerzeichen am Ende der Zeilen vermieden werden. Dies ist der Grund, warum einige Stilprüfer eine Warnung auslösen, wenn sie auf abschließende Leerzeichen stoßen, und einige Editoren sie automatisch zuschneiden.

Bildbeschreibung hier eingeben

Abbildung: Syntax-Hervorhebung kann dazu beitragen, nachgestellte Leerzeichen in Situationen zu vermeiden, in denen es zu Fehlern kommen kann, aber verlassen Sie sich nicht nur darauf.

Ein anderer Kontext, der in einer vorherigen Antwort kurz erwähnt wurde , sind Daten, die in Dateien gespeichert sind.

Zum Beispiel können CSV-Dateien, die nachgestellte Leerzeichen enthalten, zu Dateninkonsistenzen führen, die auch sehr schwer zu erkennen sind: Normkonforme Parser kürzen die Leerzeichen (die Norm gibt an, dass führende oder nachgestellte Leerzeichen irrelevant sind, sofern sie nicht in doppelte Anführungszeichen gesetzt werden), aber Einige Parser verhalten sich möglicherweise falsch und behalten das Leerzeichen als Teil eines Werts bei.

Andere benutzerdefinierte Formate berücksichtigen möglicherweise speziell, dass Leerzeichen Teil des Werts sind, was zu konsistenten, aber immer noch schwierig zu debuggenden Situationen führt.

Arseni Mourzenko
quelle
14

Ich habe vor kurzem einen Tag damit verbracht, nach einem Fehler zu suchen, der sich als unerwartetes Leerzeichen in den Daten herausstellte.

ddyer
quelle
13
Ich denke, es ist ein Fehler. Bei der Codeverarbeitung von Eingaben, die vom Menschen generiert wurden, sollten nachfolgende Leerzeichen und häufig führende Leerzeichen ebenfalls verworfen werden.
Kevin Cline
@ Kevincline - Es sollte zumindest sein. Wenn es auf dem Bildschirm oder auf dem Ausdruck nicht sichtbar ist, möchte ich nicht darüber nachdenken.
Rook
6
Weil Sie einen Tag damit verbracht haben, nach einem Fehler zu suchen, sind nachfolgende Leerzeichen eine große Sache? Bitte ändern Sie Ihre Antwort so, dass sie allgemeiner ist. Fügen Sie einige Hintergründe, Argumente, ... hinzu. Ich persönlich hatte nie nachgestellte Leerzeichenprobleme, aber ich benutze das nicht als Schlussfolgerung, dass sie auch kein Problem sind.
Steven Jeuris
2
@Steven Nachgestellte Leerzeichen verursachten einen Fehler, der nur schwer aufzuspüren war. Scheint mir eine gute Antwort zu sein. Sie können sich vorstellen, wie ein Code zum Parsen von Daten in dieser Situation beschädigt werden könnte.
Will Sheppard
Ich habe Leerzeichen am Ende der Daten entfernt und jetzt schlägt ein Test fehl. Sie sind dafür verantwortlich. Wie heißen Sie? Wohin soll ich die Rechnung schicken?
Thomas Weller
8

Wenn ich Programm-Quellcode auswähle, um ihn zu kopieren und einzufügen (oder zu löschen), finde ich es etwas ärgerlich, den unregelmäßigen zusätzlichen Leerraum am Zeilenende zu sehen: Da ich den Code lesen muss, während ich ihn auswähle , der nachgestellte Leerraum ist ein unnötiges Geräusch. Beispiel (Punkte stehen für den Leerraum):

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

Dieses Beispiel ist künstlich, aber ich habe viel Code gesehen, der so aussieht.

Giorgio
quelle
7

Neben dem offensichtlichen Problem, dass es in bestimmten Fällen das Parsen bricht? Wie ein anderes Plakat festgestellt hat, kann es zu subtilen und schwer nachvollziehbaren Fehlern kommen. Leerzeichen sind nicht immer unbedeutend. In einigen Fällen kann ein nachgestelltes Leerzeichen die Bedeutung einer Code- oder Datenzeile erheblich verändern.

In den meisten Fällen dient Whitespace zum Formatieren des Codes für menschliche Leser. Nachgestellte Leerzeichen können auf verschiedene Dinge hinweisen, darunter:

  • Eine unvollständige Aussage;
  • Ein fehlender Kommentar;
  • Eine fehlerhafte Bearbeitung; oder
  • Schlampige Bearbeitung.

Zwei davon können zu fehlerhaften Funktionen führen, und ein anderer kann das Verständnis des Codes erschweren.

BillThor
quelle
4

Es gibt Programmiersprachen, die empfindlich auf Leerzeichen in der Endzeile reagieren. Beispielsweise gibt ein TCL-Skript einen Fehler aus, wenn am Ende einer Zeile ein Leerzeichen steht.


quelle