Einrückung: Spaces vs. Tabulatoren...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.

Was verwendest du?

weniger als 4 Spaces
3
5%
4 Spaces
44
80%
5 Spaces
0
Keine Stimmen
6 Spaces
0
Keine Stimmen
7 Spaces
0
Keine Stimmen
8 Spaces
0
Keine Stimmen
mehr als 8 Spaces
0
Keine Stimmen
1 TAB
7
13%
2 TABs
0
Keine Stimmen
mehr als 2 TABs
1
2%
 
Insgesamt abgegebene Stimmen: 55
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Gleich vorweg, ich verwende auch die üblichen 4 Spaces, statt Tabulatoren, weil es halt üblich ist...

Ich hab mir allerdings mal darüber Gedanken gemacht, was eigentlich besser ist, TABs oder Spaces?

Ich denke TABs wären eigentlich besser:
  • * Die Visuelle Einrückung mit TABs kann jeder im Editor indivisuell einstellen, dennnoch kann man den Sourcecode mit einander mischen.
    * Das mischen von Sourcecode mit Leerzeichen funktioniert nur gut, wenn jeder die selbe Anzahl verwendet.
    * Mit TABs gibt es keine unterschiedliche Anzahl der Einrückungen, anders als bei Spaces, wo die meisten 4 Stück nehmen, aber nicht wirklich alle.
    * Die TAB Taste erzeugt in den meisten Editoren per default TABs und keine Spaces ;)
    * Der Sourcecode ist ein kleines Stückchen kleiner: 4Bytes (Spaces) <-> 1Byte (TAB)
    * Ein zusätzliches oder ein fehlendes Leerzeichen ist viel schlechter zu erkennen als bei TABs, weil bei TABs der Abstand viel größer ist, bemerkt man ein falsches Einrücken sofort.
Wie kam es eigentlich dazu, das man sich auf 4 Leerzeichen "festgelegt" hat?

(Ich gehe mal davon aus, das die Umfrage einen klaren Favorit aufzeigen wird ;) )

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

4 Leerzeichen vielleicht weil's zu 8 die nächstkleinere Zweierpotenz ist und man bei 8 mit einer ``if``-Abfrage innerhalb einer Schleife, die in einem ``try``/``except``-Block steht, innerhalb einer Methode, also auch innerhalb einer Klasse, schnell an der 80-Zeichen-Grenze für Zeilen scheitert ohne das man sich vorwerfen muss übermässig tief zu verschachteln.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mag ja sein, dass Tabs individueller wären, aber man kann die Leute doch nich einfach so ins Verderben laufen lassen ;)

In den wirklich brauchbaren Editoren kann man Tabs automatisch in Spaces umwandeln lassen. Richtig gute erkennen, wo denn nen Tab war und versuchen sich so zu verhalten, dass man die Vorzüge davon nutzen kann ;)

In Zeiten von Terabyte Festplatten sollten die 4 Byte doch wirklich nich viel ausmachen ;)

Letzteres ist nen guter Punkt, aber hier kann man auch wieder auf die Wahl des Editors verweisen ;)

Warum 4 Spaces? Der Code ist soweit auseinander gerückt, dass es sich wirklich visuell abhebt, aber noch so nah dran, dass es nich getrennt wahrgenommen wird. Wird übrigens nich nur im PEP8 empfohlen, sondern auch in zahlreichen anderen Büchern(anderer Sprachen).

Ein ganz klarer Punkt für Spaces sind halt, dass man sichergehn kann, dass der Code wirklich überall gleich aussieht und sich nicht ggf an den Editor Einstellungen vergreifen muss.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@BlackJack: Klar, 8 Leerzeichen sind eindeutig zu viel und 4 sind IMHO auch die beste Wahl. Aber warum überhaupt Leerzeichen und keine Tabulatoren?
cofi hat geschrieben:In den wirklich brauchbaren Editoren kann man Tabs automatisch in Spaces umwandeln lassen. Richtig gute erkennen, wo denn nen Tab war und versuchen sich so zu verhalten, dass man die Vorzüge davon nutzen kann ;)
So ein Editor verwende ich natürlich auch nur... Allerdings kann man IMHO mehr Editoren so einstellen, das die TABs als vier Leerzeichen anzeigen können.

Im Grunde hätte man mit TABs also mehr Editoren die benutzbar wären.

Den Editor muß man so oder so einstellen. Ob auf "Statt TAB mache vier Leerzeichen" oder "Zeige einen TAB als vier Leerzeichen an" ist doch eigentlich egal.

cofi hat geschrieben:Warum 4 Spaces? ... Wird übrigens nich nur im PEP8 empfohlen, sondern auch in zahlreichen anderen Büchern(anderer Sprachen).
Das ist aber IMHO ein schwaches Argument. Weil es viele andere Sprachen so machen, machen wir es auch so... Dann hätte man auch gleich geschweifte Klammern statt Einrückung nehmen können ;)
cofi hat geschrieben:Ein ganz klarer Punkt für Spaces sind halt, dass man sichergehn kann, dass der Code wirklich überall gleich aussieht und sich nicht ggf an den Editor Einstellungen vergreifen muss.
Aber genau da ist doch das Problem. Es sieht nur überall gleich aus, wenn jeder die selbe Anzahl der Lehrzeichen verwendet. Bei Tabulatoren kann jeder selber Einstellen, wie es aussieht...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
OldBoy
User
Beiträge: 41
Registriert: Samstag 12. Januar 2008, 20:39

Der Vorteil von Spaces gegenüber Tab:

es sind IMMER Spaces, egal welcher Editor, egal welches Anzeigeprogramm (type/more/less/pg ...), beim Drucken, beim Verarbeiten durch irgendwelche Analyseprogramme etc. etc.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Wobei die Space-Taste schneller kaputt geht und man dann auf einem Minimalsystem mit einem einzigen total simplen Editor verloren ist, Tabs ftw :p

Nein imo sind Spaces schon sinnvoll. Vorallem aus dem zuletzt genannten Grund. Außerdem, selbst wenn Tabs vs Spaces total unerheblich wäre, sollte man auch noch beachten, dass Einheitlichkeit immer gut ist. Auch wenn's bei den meisten Editoren kein großer Aufwand ist, Tabs zu Spaces umzuwandeln bzw. andersrum.
Früher als ich noch mit PHP gescriptet habe, hab ich allerdings immer mit 2 Leerzeichen eingerückt. Find ich eigentlich auch nicht so schlecht, eigentlich sogar besser, da man bei 5 Verschachtelungen immer noch die Zeilenlänge beachten "muss". 4 Spaces sind natürlich übersichtlicher aber damals haben mir auch 2 gereicht und PHP ist sowieso schon so unübersichtlich.

btw 21:1, wer ist der tabber? :)
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Jens!
jens hat geschrieben:
cofi hat geschrieben:Ein ganz klarer Punkt für Spaces sind halt, dass man sichergehn kann, dass der Code wirklich überall gleich aussieht und sich nicht ggf an den Editor Einstellungen vergreifen muss.
Aber genau da ist doch das Problem. Es sieht nur überall gleich aus, wenn jeder die selbe Anzahl der Lehrzeichen verwendet. Bei Tabulatoren kann jeder selber Einstellen, wie es aussieht...
Wir sprechen doch von gegebenem Code? Der sieht (bei monospaced Fonts) überall gleich aus, unabhängig davon ob man selbst so einrücken würde.

Mein HP-UX Terminal auf der Arbeit gibt beispielsweise Tabs immer als (min.) 8 Spaces aus, was sehr zu Lasten der Übersichtlichkeit geht, ich aber nicht selbst einstellen kann.
Aber wie schon oben erwähnt kann man ja die Darstellung (Spaces/Tab) mit den meisten Editoren einstellen. Also kann es auch Pfadfinder geben, die die Tabs auf 2 Spaces stellen und dafür 2 Tabs verwenden. Will sagen, dass sich die Frage nach der Anzahl der Zeichen durchaus auch bei Tabs stellen kann.

Nicht zuletzt wird die Tab-Taste in einigen Anwendungen zum Wechseln des Widgets verwendet, so dass es bei der Eingabe zu Komplikationen kommen kann.

Ich denke auch, dass 4 Spaces schon aus metrischer und harmonischer Sicht nicht zu kurz und nicht zu weit sind. Und wenn doch jemand 3 oder 7 Spaces verwendet, dann ist das kein Beinbruch, da man sich ja nicht an den Zahlen orientiert, sondern an den vorigen Einrückungen.

Für mich gibt es nur eine wichtige Regel: NIEMALS MISCHEN. :-)

Grüße,
der Michel

ps. Meine Einstellung ist: interpretiere Tab als 4-Spaces. Wenn meine Eingabemarke hinter dem 4. Space steht und ich die Rück-Taste drücke, dann werden alle 4 Spaces auf einmal gelöscht. Finde ich klasse!
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Um ehrlich zu sein ist mir das ganze ziemlich egal Hauptsache einheitlich. Also verwende ich für Python und Java 4 Spaces - so wie es die jeweiligen Konventionen verlangen. Auf der Arbeit wiederum verwende in Tabs für c#.
Ein guter Texteditor nimmt einem das nachdenken da sowieso ab. ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Warum ist in der Liste 5 Spaces (hab ich noch nie gesehen) aber kein 2 Spaces (sieht man in jeder Google Lib)?
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

mitsuhiko hat geschrieben:Warum ist in der Liste 5 Spaces (hab ich noch nie gesehen) aber kein 2 Spaces (sieht man in jeder Google Lib)?
Ich hatte eigentlich mehr Antworten eingegeben, darunter war auch 2 Spaces, dann sagte mir phpBB beim Abschicken, das es zu viele Antworten sind. Warum man überhaupt mit dem Button "hinzufügen" zu viele Antworten generieren kann, bleibt wohl ein Geheimnis von phpBB.

Ist aber interessant das google 2 Spaces nutzt... Wo doch auch BDFL da arbeitet...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Ich habe Komodo und SciTE mit autoindent auf 4 Leerzeichen eingestellt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

jens hat geschrieben: Ist aber interessant das google 2 Spaces nutzt... Wo doch auch BDFL da arbeitet...
Der kam erst viel später.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

jens hat geschrieben:@BlackJack: Klar, 8 Leerzeichen sind eindeutig zu viel und 4 sind IMHO auch die beste Wahl. Aber warum überhaupt Leerzeichen und keine Tabulatoren?
Nicht jedes Terminal erlaubt es, die Breite der Tabs einzustellen, vor allem aus Kompatibilitätsgründen zu alten Programmen, die sich bei der Ausgabe darauf verlassen das Tabs acht Zeichen lang sind.

Code, der Tabs nutzt, kann mitunter sehr plötzlich sehr hässlich außen, wenn man ihn ohne Pager auf einem dummen Terminal anzeigt. Und ja, es gibt noch genügend Leute, die keine IDE nutzen, und auf dem Terminal greppen, diffen oder annotaten ;)

Das Argument der Umwandlung zählt imho nicht wirklich. Ich habe nicht wirklich Lust, jedesmal eine sed-Pipe an ein diff-Kommando anzuhängen, zumal man damit auch schnell die Ausgabe durcheinander bringen kann, wenn das Diff-Kommando selbst Tabs zur Formatierung der Anzeige nutzt ;)
Im Grunde hätte man mit TABs also mehr Editoren die benutzbar wären.
Willst du mir ernsthaft erzählen, dass du notepad nutzen würdest, nur weil dir Tabs die Möglichkeit dazu geben?!

Antworte bitte ehrlich: Fällt dir ein einziger Editor ein, der die Tabtaste nicht zur Einrückung mit Leerzeichen nutzen kann, aber trotzdem wert wäre, zur Python-Programmierung benutzt zu werden?
Den Editor muß man so oder so einstellen. Ob auf "Statt TAB mache vier Leerzeichen" oder "Zeige einen TAB als vier Leerzeichen an" ist doch eigentlich egal.
Bei Terminals kann man da nichts einstellen.

Gehe ich richtig in der Annahme, dass du eine IDE nutzt und nie oder nur sehr, sehr selten auf der Konsole arbeitest? Das würde dein "Das-kann-man-alles-einstellen"-Argument erklären, dass an der Realität eines Programmierers, die die Konsole intensiv benutzt, ziemlich vorbeigeht.
cofi hat geschrieben:Warum 4 Spaces? ... Wird übrigens nich nur im PEP8 empfohlen, sondern auch in zahlreichen anderen Büchern(anderer Sprachen).
Das ist aber IMHO ein schwaches Argument.
PEP8 ist imho das stärkste Argument. Wir haben einen Styleguide, und wir sollten ihn um der EInheitlichkeit willen auch beachten. Die Absätze, die PEP8 über Einheitlichkeit verliert, solltest du dir diesbezüglich zu Gemüte führen ;)
Ein ganz klarer Punkt für Spaces sind halt, dass man sichergehn kann, dass der Code wirklich überall gleich aussieht und sich nicht ggf an den Editor Einstellungen vergreifen muss.
Aber genau da ist doch das Problem. Es sieht nur überall gleich aus, wenn jeder die selbe Anzahl der Lehrzeichen verwendet. Bei Tabulatoren kann jeder selber Einstellen, wie es aussieht...
So? Wie stellt man denn die Tab-Größe auf der Linux-Konsole um?
Zuletzt geändert von lunar am Sonntag 6. Juli 2008, 10:17, insgesamt 1-mal geändert.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

lunar hat geschrieben:
cofi hat geschrieben:Warum 4 Spaces? ... Wird übrigens nich nur im PEP8 empfohlen, sondern auch in zahlreichen anderen Büchern(anderer Sprachen).
Das ist aber IMHO ein schwaches Argument.
PEP8 ist imho das stärkste Argument. Wir haben einen Styleguide, und wir sollten ihn um der EInheitlichkeit willen auch beachten. Die Absätze, die PEP8 über Einheitlichkeit verliert, solltest du dir diesbezüglich zu Gemüte führen ;)
Was mich an eine Diskussion vor einiger Zeit errinert... Ich habe jemanden erzählt, dass es eben dieses PEP8 für Python gibt und jeder guter Programmierer eigentlich sich daran hält und den Code halt konsistent und ungefähr gleichaussehen lässt... Er argumentierte mit: "Niemand sagt mir wie ich zu programmieren habe" und "Warum sollte ich mich daran halten, was bringt mir das?"

Ich finde sowas traurig... Ich freue mich wenn es ein paar tolle "Regeln" gibt, die wirklich Sinn machen! Ich konnte auch nicht von Anfang an alle, aber hier im Forum hat man mich immer darauf hingewiesen und inzwischen achte ich auch darauf. Es ist wirklich angenehmer für's Auge, man erkennt sofort Unterschiede zwischen vielen Sachen! Methoden, Klassen, Instanzen, Körper von Funktionen sind klar erkennbar... Ich finde das PEP8 den klügsten Styleguide von allen Progrmamiersprachen. C#, Java und Konsorten haben ja auch sowas in der Art, aber viele von denen haben Regeln die sehr merkwürdig sind.
Benutzeravatar
Goswin
User
Beiträge: 363
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen
Kontaktdaten:

Ich werde weiterhin nur 2 Spaces verwenden, ganz egal was die Mehrheit tut. Ich möchte einen Quellcode, den ich auf DIN-A4 Seiten ausdrucken kann, und meine Zeilen sind jetzt schon zu lang.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Goswin hat geschrieben:Ich werde weiterhin nur 2 Spaces verwenden, ganz egal was die Mehrheit tut. Ich möchte einen Quellcode, den ich auf DIN-A4 Seiten ausdrucken kann, und meine Zeilen sind jetzt schon zu lang.
Dann würde ich mich etwas ab der Komplexität des Codes fragen ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ich nutze 4 Spaces. 8 Ist meiner Meinung nach unnötig viel, unter 4 wird es dann auch wieder kritisch.
Bei 8 Spaces wird auch langsam mit der Zeilenlänge problematisch. Nehmen wir eine Klasse und in einer Methode eine Schleife mit einer if Abfrage evtl. verschachtelt da sind 8 Spaces unpraktisch.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

2 Spaces in JavaScript weil das genau auf $( in jQuery auffüllt genauso wie in XML/HTML, 4 Spaces in Python weil das PEP8 will, 1 ein Tab, der als 8 Spaces dargestellt wird in C.
TUFKAB – the user formerly known as blackbird
lunar

Goswin hat geschrieben:Ich werde weiterhin nur 2 Spaces verwenden, ganz egal was die Mehrheit tut. Ich möchte einen Quellcode, den ich auf DIN-A4 Seiten ausdrucken kann, und meine Zeilen sind jetzt schon zu lang.
Hast du dich schon mal gefragt, warum PEP 80 Zeichen als Maximum für die Zeilenlänge empfiehlt? ;) Ein gelegentlicher Zeilenumbruch tut der Lesbarkeit gut und erleichter das Ausdrucken ungemein ;)

Meinereiner nutzt immer und überall vier Leerzeichen, es sei denn, ein Styleguide empfiehlt eine andere Einrückung. Das spart lästige Konfigurationsarbeit im Editor ;)
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Goswin hat geschrieben:... Ich möchte einen Quellcode, den ich auf DIN-A4 Seiten ausdrucken kann, und meine Zeilen sind jetzt schon zu lang. ...
Dann strukturiere Deine Zeilen. Breche nach dem Gleichheits-Zeichen, Klammer-auf, etc. um und rücke dann weiter ein.

Gerade mit Python lässt sich so schön und so leicht Quellcode auf 80 Zeichen Zeilenlänge ausrichten, wie kaum in sonst einer andere Sprache.

Sogar Strings, mehrere If-Bedingungen und List Comprehensions lassen sich so übersichtlich in mehrere Zeilen anordnen, dass sie neben der Einhaltung der Breite auch eine zus. Steigerung der Lesbarkeit bekommen.

>>Masaru<<
Antworten