Finden Python-Programmierer das Whitespace-Problem unpraktisch? [geschlossen]

11

Viele Programmierer sind bei der ersten Begegnung mit Python sofort von der Bedeutung von Leerzeichen abgeschreckt. Ich habe verschiedene Gründe dafür gehört, dass dies unpraktisch ist, aber ich habe noch nie eine Beschwerde von einem Python-Programmierer gehört.

Natürlich habe ich nicht viele Python-Programmierer getroffen, da ich meine Karriere in der Java-Welt verbracht habe.

Meine Frage richtet sich also an diejenigen unter Ihnen, die an einem großen Python-Projekt teilgenommen haben (mehr als 3 Monate, wobei Python die Hauptsprache ist): Fanden Sie das Whitespace-Problem als unpraktisch und ständig ärgerlich? Oder war es kein Problem, wenn Sie einmal im Fluss waren?

Ich stelle die Frage nicht, weil ich für oder gegen Python oder für oder gegen die Verwendung von Leerzeichen bin. Ich mag Python, aber ich habe es nie für etwas Großes verwendet.

Bitte geben Sie keine Spekulationen an, wenn Sie keine Erfahrung mit Python haben.

Eric Wilson
quelle
2
Würden sie die Sprache benutzen, wenn sie es taten? Ich würde nicht. Ärgerliche / ablenkende Syntaxanforderungen sind eines der Dinge, die mich dazu bringen könnten, eine andere Sprache für ein Projekt zu wählen (vorausgesetzt natürlich, dass ich wählen kann).
seit wann ist das Leerzeichen ein Problem? :-)
Kugel
22
Wir finden es unpraktisch, dass alle anderen es immer wieder ansprechen. Wir denken nie darüber nach.
Winston Ewert
Das Problem der Leerzeichen unterscheidet sich nicht von vor Jahren - OCCAM2 hatte erhebliche Leerzeichen. Es war keine große Sache.
schnell_now
4
Das einzige Mal, dass ich es jemals als störend empfunden habe, war das Kopieren und Einfügen von Code aus dem Internet, der mit Leerzeichen anstelle von Tabulatoren geschrieben wurde (oder umgekehrt) und buchstäblich unsichtbare Syntaxfehler verursachte
Cameron,

Antworten:

14

Es gibt nur einen Fall, in dem ich das Leerzeichen als störend empfinde, und zwar beim Ändern des vorhandenen Codes, sodass ein Codeblock mehr oder weniger eingerückt werden muss als zuvor (z. B. Hinzufügen oder Löschen eines if:Codes vor dem Code). Wenn Sie in einer Sprache wie C schreiben, fügen Sie einfach die ifKlammern und ein Paar hinzu und drücken (in Emacs oder einem guten Editor) die Tabulatortaste, damit der Editor die Einrückung automatisch korrigiert. In Python müssen Sie es selbst tun. Natürlich gibt es Editor-Verknüpfungen, um dies selbst zu tun. Es ist also nicht so schlimm, aber der Verlust der Redundanz bedeutet eine leichte zusätzliche Belastung für den Programmierer.

Im Großen und Ganzen ist es jedoch ein Gewinn, wenn auch nur verhindert wird, dass die Hälfte meines Bildschirms mit Zeilen wie den folgenden gefüllt wird:

         }
      }
   }
}
dfan
quelle
1
In jedem vernünftigen Editor, der Python spricht, gibt es eine sehr einfache Möglichkeit, Codeblöcke neu zu indentieren. In der Wing IDE wähle ich einfach den Block aus und drücke die Tabulatortaste (oder die Umschalttaste, um die Einrückungsstufe zu verringern).
Adam Crossland
1
Ja, in Emacs wähle ich den Block aus und drücke C-c >oder C-c <. Sie müssen es jedoch immer noch selbst tun. Anders ausgedrückt, da Leerzeichen und Codelogik nicht redundant sind, können Sie nicht einfach einen riesigen Block auswählen und M-x indent-region(oder was auch immer die Version Ihres Editors ist) aufrufen, um alles "richtig" einzurücken.
dfan
6
@Adam, ein guter Editor erleichtert das Ändern der Einrückungsstufe. In einer geschweiften Sprache können Sie jedoch neuen Code einfügen und Ihren bevorzugten Tastendruck drücken, um die Datei erneut einzubinden. Tada! Einrückung ist korrekt. In Python müssen Sie einfügen, auswählen, einrücken / einrücken. Es ist nicht viel, aber es gibt hier einen kleinen Gewinn für Zahnspangen.
Winston Ewert
@ Winston - muss dein Redakteur sein. Wenn der Code, den Sie einfügen, an sich korrekt eingerückt ist, müssen Sie nur die Registerkarte (UMSCHALT +) eingeben, um ihn entsprechend auszurichten, wenn er einige Ebenen zu weit rechts / links herauskommt - kein wirklicher Unterschied zum Drücken der Taste zu Die Datei erneut einrücken. Außerdem - du sollst keinen Code kopieren / einfügen :)
Ingo
1
@ Winston: Selbst Notepad ++ Einrückungsblöcke bei Verwendung von Tab und Shift-Tab, ich habe die Vim-Verknüpfung noch nicht gefunden, aber ich benutze sie nicht genug, denke ich: p
Matthieu M.
50

Ich liebe Pythons bedeutendes Leerzeichen. Für mich ist es das perfekte Beispiel für DRY auf syntaktischer Ebene. Die vom Menschen lesbare Methode zum Anzeigen, wo ein Codeblock beginnt und endet, ist das Einrücken. Wenn Sie möchten, dass Ihr Code lesbar ist, müssen Sie ihn unabhängig von der Sprache einrücken. Es ist albern, den Programmierer dazu zu bringen, diese Informationen zweimal anzugeben, einmal für den Compiler / Interpreter und einmal für Menschen. Darüber hinaus ähnelt das Einrücken in C-ähnlichen Sprachen einem Kommentar: Es soll die Verständlichkeit verbessern, aber seine Bedeutung wird vom Compiler / Interpreter nicht erzwungen und kann sehr leicht nicht mehr mit der tatsächlichen Bedeutung (wo sich die geschweiften Klammern befinden) synchronisiert werden. eher verschleiern als klären.

Dsimcha
quelle
8
+1 für Nicht wiederholen. Es wird empfohlen, den Code so einzurücken, dass er die Blockstruktur widerspiegelt. Warum also auch Start- / Endmarkierungen?
Steve314
12

Signifikante Leerzeichen sind für mich eigentlich praktisch . Es bringt mich dazu, weniger zu tippen. Es formatiert Code ordentlich und ziemlich eindeutig. Dadurch wird der Code lesbarer.

(Aus den gleichen Gründen mag ich auch in Haskell signifikante Leerzeichen.)

9000
quelle
1
Ich hätte meine positiven Erfahrungen auch mit Haskell Whitespace geteilt, aber FarmBoy bestand darauf, dass man 3 Monate Erfahrung mit Python haben muss, alles andere war Spekulation. :-)
Ingo
1
Meine Erfahrung mit Python hat uns seit 1998 gemacht, daher ist meine Antwort wahrscheinlich qualifiziert :) (Schade, dass meine Erfahrung mit Haskell viel kürzer ist.)
9000
@ 9000 Obwohl Haskell vor Python kam! : D
Pradyunsg
8

Als ich Python zum ersten Mal verwendete, war das Whitespace-Ding neu und daher eine nervige Einschränkung.

Jetzt merke ich es gar nicht mehr. Ich benutze Python seit 11 Monaten.

Matt Ellen
quelle
5

Zunächst einmal - meine Brot- und Buttersprachen sind Python, SQL und Java. Ich liebe Pythons Leerzeichen - es ist weniger Syntax und Typisierung und zwingt die Leute, lesbaren, ordentlich formatierten Code zu schreiben. OTOH, ich hasse die Ausführlichkeit von Java - so sehr, dass ich Python tatsächlich verwende , um alle Boilerplates zu generieren, die ich in Java schreiben muss, was alle meine Java-Mitarbeiter beeindruckt, die von meiner Produktivität erstaunt sind.

Die einzige große Einschränkung ist jedoch das Kopieren / Einfügen von Code aus dem Web - es verursacht häufig gemischte Leerzeichen und Tabulatoren, für deren Bereinigung ein zusätzlicher Schritt erforderlich ist, und ich fange normalerweise erst nach einer Laufzeitausnahme ab.

Greg
quelle
Es kann sehr hilfreich sein, Ihrem Editor zu highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"sagen, dass er Tabs als Fehler in der Syntax hervorheben soll - für vim verwende ich in meinem vimrc
Daenyth
4

Wenn sich ein Programmierer über die Bedeutung von Leerzeichen ärgert, wird er wahrscheinlich kein Python-Programmierer.

BenjaminB
quelle
1
Ich habe einige Leute gehört, die Python predigten und sagten, sie hätten Probleme mit The Whitespace Thing (tm), aber nach einer Weile gefiel es ihnen. Aus meiner Beobachtung geht hervor, dass sich die Wahrscheinlichkeit, dass einer von ihnen eine solche Geschichte erzählt, einer annähert, wenn sich mehr Menschen einer Diskussion zu diesem Thema anschließen. (Bearbeiten: Sofort durch die zweite Antwort bewiesen ...)
@delnan, ich kann das abonnieren.
Ingo
3

Ich wette, Sie würden erhebliche Überschneidungen zwischen den Personen finden, die ein Problem mit signifikanten Leerzeichen haben, und denen, die keine Erfahrung mit einem guten Texteditor für Programmierer wie Emacs haben, der die meisten Einrückungen ohne deren Beteiligung handhabt.

Sobald Sie Python verinnerlicht haben, ist dies auf keinen Fall mehr ein Problem. Tatsächlich wird die Prägnanz und der geringe Platzbedarf auf dem Bildschirm zu einem großen Vorteil für die Lesbarkeit. Da ich hauptsächlich Python verwende, finde ich es schwierig, mich in Sprachen zu disziplinieren, in denen es mehr Redundanz gibt (z. B. Java und C #). Das Setzen von Klammern um Code, dessen Einrückung seine Struktur bereits deutlich macht, geht mir auf die Nerven.

JasonFruit
quelle
3

Für die eigentliche Codierung ist dies überhaupt nicht unpraktisch, aber tatsächlich von Vorteil (siehe die Antwort von dsimcha).

Es kann ärgerlich sein, wenn es um Kommunikationstechnologien geht, die führende Leerzeichen nicht berücksichtigen (wie viele nicht programmierorientierte Webforen und auch das Einbetten von Python-Code in eine andere Sprache, wie z. B. HTML-Vorlagensprachen), obwohl ich das als sehe Die redundanten Sprachen, die die Codestruktur zweimal ausdrücken, sind eher ein Fehler in den Tools, die führende Leerzeichen entfernen, als ein Fehler in Python. Sie sind jedoch besser für solche destruktiven Umgebungen geeignet (da Sie den Code in einen Editor einfügen und automatisch einfügen können) reindent basierend auf den expliziten strukturellen Markern oder einfach egal, ob der Code nur ausgeführt und nicht von Menschen gelesen wird).

ncoghlan
quelle
2

Ich finde das Leerzeichen nicht ärgerlich. Ich finde fehlende oder inkonsistente Einrückungen in anderen Sprachen sehr ärgerlich. Ich verstehe, dass dieses Problem eines der Probleme ist, die der Stil lösen soll.

Python ist keine meiner Hauptsprachen.

Ich finde den Umgang mit Tabulatoren und Leerzeichen in Einrückungen gelegentlich ärgerlich. Dies kann zu Problemen führen, wenn Sie Editoren von einer Bearbeitung zu einer anderen wechseln oder wenn Sie Code bearbeiten, den eine andere Person geschrieben hat. Es ist normalerweise trivial zu lösen.

BillThor
quelle
1
Das Mischen von Tabulatoren und Leerzeichen in Python-Einrückungen ist der kürzeste Weg zur Hölle: p
Matthieu M.
@ Mattieu: Auf jeden Fall ist das mein Ärger.
BillThor
1

Ich komme aus einem C # / Javascript / XBase-Hintergrund in keiner bestimmten Reihenfolge, und in meinen Versuchen mit Python ist das für mich überhaupt keine Überlegung. Es ist wie bei Zahnspangen in anderen Sprachen - so funktioniert es, die Dinge so einzufügen, wie es die Regeln sagen, und deine Augen zu trocknen ist meine Einstellung.

Alan B.
quelle