it-swarm-eu.dev

Warum ist das Nachlaufen von Leerzeichen eine große Sache?

Nachgestellte Leerzeichen sind für Programmierer ein Problem genug, da Editoren wie Emacs über spezielle Funktionen verfügen, die sie hervorheben oder automatisch entfernen, und bei vielen Codierungsstandards müssen 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 vorsichtig sind, sie zu vermeiden, können sie sie zwischen den Commits ändern, und dann werden wir mit scheinbar unveränderten Zeilen verschmutzt, nur weil jemand sie entfernt hat oder 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 Nachlaufen von Leerzeichen so wichtig?

120
EpsilonVector

Gründe, warum es mir wichtig ist:

  • Wenn ich die Taste "Ende" drücke, erwarte ich, dass der Cursor an das Ende der Zeile geht (je nachdem, welchen Editor ich verwende und wie er konfiguriert ist), und ich erwarte, dass ich sofort mit der Eingabe beginnen kann. Wenn der Cursor dort ankommt und ich 3 oder 4 Zeichen löschen muss, ist das ärgerlich. Vor allem, wenn es in allen Dateien inkonsistent ist.

  • Wenn ich Zeichenfolgenliterale habe, die mehrere Zeilen umfassen, kann ein nachfolgendes Leerzeichen dazu führen, dass die Ausgabezeichenfolge bei Verwendung falsch aussieht.

Whitespace ist zwar nicht streng programmiert, kann jedoch die Dateneingabe ernsthaft beeinträchtigen, wenn eine Datei nachläuft/führt, die analysiert und als Eingabe für etwas anderes verwendet wird. Dies geschieht am häufigsten, wenn eine saubere, generierte Eingabedatei von jemandem, der sie in Excel oder etwas anderem bearbeitet, verschmutzt wird und sich dann nachgestellte Leerzeichen (und andere Formatierungsprobleme) einschleichen können.

Ich hasse es wirklich, Leerzeichen nachzulaufen, aber der genaue Grund ist etwas 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 getippt bekommen, das in eine Publikation gesetzt werden musste? In allen modernen Veröffentlichungen, insbesondere bei der Verwendung von Spalten, ist es üblich, dass Sätze innerhalb eines Absatzes nacheinander folgen und nicht für jeden Satz eine neue Zeile beginnen. Nun, wenn es nachgestellte Leerzeichen gibt, ist es viel aufwendiger, es richtig zu machen (viele Such- und Ersetzungsaktionen, die doppelte Leerzeichen eliminieren, usw.).

Andere Gründe (beim Programmieren), keine guten Gründe, ich weiß, aber sie stören meine unbewusste Psyche auf solch erschwerende, intensive Weise, dass sie mich zwingen, sie zu beseitigen:

  • Es benötigt 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 der nachgestellte Bereich nicht passt

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

Der letzte Grund, an den ich denken kann, ist eine inkonsistente Cursorbewegung. Es fühlt sich an, als ob der Cursor am Ende einer Linie in dünner Luft hängt. Jeder Schritt nach rechts kann dazu führen, dass er in unbekanntem Ausmaß entweder abfällt oder weiter schwebt. Er fühlt sich einfach instabil an (wie die unsichtbaren oder verschwindenden Blöcke, die Super Mario sprang immer auf).

Wahrscheinlich kann bei mir Trailspacefobia diagnostiziert werden?

29
Louis Somers

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

Vim ist so konzipiert, dass allgemeine Aktionen Buchstaben so sauber zugeordnet werden, dass Sie nicht einmal darüber nachdenken müssen, welche Buchstaben- oder Tastenkombination Sie treffen müssen. Mit verschiedenen Hotkeys kann der Cursor so schnell um den Text springen, dass nur ein paar Tastenanschläge erforderlich sind, um ihn an die gewünschte Stelle 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 {oder} oder (oder) oder etwas überlappen sollte - Sie müssen Ihren Gedankenfluss nicht unterbrechen Holen Sie sich eine Idee auf den Bildschirm.

Aber dann kommt ein nachfolgendes Leerzeichen und die Bewegungen des Cursors sind nicht mehr vorhersehbar. Ihr Schreibvorgang wird unterbrochen, weil etwas, das Sie nicht sehen können, die Position des Cursors beeinflusst. Sie müssen also Ihren Gedankengang unterbrechen, um ihn dorthin 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, nachlaufendes Leerzeichen zu finden, wenn es am wenigsten erwartet wird, ist gena so.

Als Nebenbemerkung habe ich auch bemerkt, dass Leute, die sich nicht für nachgestellte Leerzeichen interessieren, die Maus für die Navigation verwenden und deshalb eher langsame Schreibkräfte sind ...

22
Izkata

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

Die offensichtlichste Situation sind mehrzeilige Zeichenfolgen. Python, JavaScript und Bash sind nur einige Beispiele für die 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 schwer zu lösen, wenn der Editor nicht für die Anzeige von Leerzeichen konfiguriert ist.

Während Syntaxhervorhebung kann helfen solche Fälle vermeiden, ist es noch einfacher, das Problem überhaupt nicht zu haben, indem am Ende der Zeilen keine Leerzeichen stehen. Aus diesem Grund geben einige Stilprüfer eine Warnung aus, wenn sie auf nachgestellte Leerzeichen stoßen, und einige Editoren schneiden sie automatisch zu.

(enter image description here

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

Ein anderer Kontext, der in eine vorherige Antwort kurz erwähnt wird, sind Daten, die in Dateien gespeichert sind.

Zum Beispiel können CSV-Dateien, die nachgestellte Leerzeichen enthalten, zu Dateninkonsistenzen führen, die ebenfalls sehr schwer zu erkennen sind: Standardkonforme Parser kürzen die Leerzeichen (der Standard gibt an, dass führende oder nachfolgende Leerzeichen irrelevant sind, sofern sie nicht durch doppelte Anführungszeichen getrennt sind) Einige Parser verhalten sich möglicherweise schlecht 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 schwer zu debuggenden Situationen führt.

17

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

14
ddyer

Wenn ich Programmquellcode 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 ist der nachgestellte Leerraum ein unnötiges Rauschen. Beispiel (Punkte repräsentieren 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.

8
Giorgio

Neben dem offensichtlichen Problem, dass es in bestimmten Fällen das Parsen unterbricht? Wie ein anderes Poster festgestellt hat, kann dies zu subtilen und schwer nachvollziehbaren Fehlern führen. Leerzeichen sind nicht immer unbedeutend. In einigen Fällen kann ein nachfolgendes Leerzeichen die Bedeutung einer Code- oder Datenzeile erheblich ändern.

In den meisten Fällen dient das Leerzeichen 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 einer falschen Funktion führen, und eine andere kann es schwieriger machen, den Code zu verstehen.

7
BillThor

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

4
user81965