Tabs vs. Leerzeichen

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.
dst
User
Beiträge: 27
Registriert: Mittwoch 28. Februar 2007, 23:42

Tabs vs. Leerzeichen

Beitragvon dst » Montag 5. März 2007, 23:40

In, in anderen Sprachen verfassten, Projekten stellt sich diese Frage zwar auch gelegentlich, aber bei Python ist sie von wesentlich größerer Bedeutung.

An verschiedenen Stellen habe ich nun gelesen, dass man für sein Python-Projekte am besten auf Leerzeichen setzt. Dass man sich zumindest auf eine Art der Einrückung festlegen sollte ist klar.

Da ich seit Ewigkeiten ein Verfechter von Einrückung per Tabulator bin und schon jetzt Probleme beim verwenden verschiedener Editoren habe, möchte ich von euch gerne wissen, was eurer Ansicht nach für Leerzeichen spricht.

Tabs sind meiner Erfahrung nach die bessere Wahl, da ein Tab eine klare und flexible Größe ist. Wenn man sich Projektintern auf vier Leerzeichen einigt, guckt derjenige, der mit acht (oder gar sechs?) Leerzeichen besser die Übersicht behält, in die Röhre.
Ich selbst bevorzuge sogar Tab-Weiten in Abhängigkeit des Editors. In Eclipse benutze ich z.B. eine geringere Einrückung als in vim.

Einzig bei auf mehrere Zeilen verteilten Statements (Funktionsaufrufe mit vielen Parametern o.ä.) muss man auf eine Bündigkeit zu einem spezifischen Teil der einleitenden Zeile zu setzen, was ich kaum als störend erachte.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Montag 5. März 2007, 23:53

Hi

Also ich denke wenn du strikt entweder tabs oder Leerzeichen nimmst sollte das ok sein. Häufiger oder besser gesagt fast überall nimmt man 4 Leerzeichen zum einrücken.

Ich verwende immer 4 Leerzeichen.

Probleme kriegst du wenn einer mit Tabulatoren arbeitet und der zweite mit Leerzeichen, dann weiss Python nicht, wieviel er nun für einen Tab nehmen soll.

Gruss
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Dienstag 6. März 2007, 03:10

Das Problem bei Tabulatoren ist, dass sie mal zwei, drei, vier, sechs, acht oder sonst wieviel Leerzeichene entsprechen. Und dann haut das schon bereits mit der 79-Spalten-Grenze schnell nicht mehr hin.
dst
User
Beiträge: 27
Registriert: Mittwoch 28. Februar 2007, 23:42

Beitragvon dst » Dienstag 6. März 2007, 04:26

In welchen Fällen ist denn eine 79-Spalten-Grenze ein Problem?

Ich denke mal, dass Du auf die Standard-Terminal-Dimensionen anspielst. Ist das wirklich ein relevantes Problem? Ich glaub der einzige Fall, wo ich noch mit solch einer Grenze zu tun habe, ist, wenn ich einen Server über eine Remote-Konsole wie Peppercon ansprechen muss - in dem Fall habe ich aber andere Probleme als eine tolle Darstellung von Python-Code.

Ansonsten sollten die meisten Editoren doch in der Lage sein, Tabweiten nach den Vorstellungen des Benutzers zu setzen. Gerade das ist in meinen Augen ein riesen Plus für Tabs.

Ich möchte wirklich nicht von mir auf andere schließen, aber das leuchtet mir im Moment nicht ein -- für Erleuchtung bin ich natürlich dankbar ;)
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 6. März 2007, 04:32

Was gegen Tabs spricht und warum Python Programmierer 4 Tabs bevorzugen:
  • Keine Tabs/Spaces Probleme
  • EOL 79
  • man kann sich an die Zeilenfortsetzungsregeln aus pep8 halten weil man mit Leerzeichen bis zur Klammer gehen kann. (Sonst müsste man tabs und Spaces mischen. Sehr nervig)
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 6. März 2007, 07:16

I.d.R. kann man auch jeden Editor so einstellen, das er statt eines TAB Zeichens vier Leerzeichen automatisch einfügt. Normalerweise kann man dann auch mit ALT-TAB wieder eine Ebene zurück gehen. Von daher, alles kein Problem.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Dienstag 6. März 2007, 07:37

EOL 79 kommt in der Tat von der gängigen Zeichenbreite in Terminals. Mal davon ab, dass man sich wohl auf keine andere Breite einigen können würde, ergibt es aber auch in weiteren Fällen Sinn:
  • Man hat zwar eine tolle Auflösung von 1600x1200 oder mehr, aber benutzt eine IDE mit Class- und Dateibrowser, vertikaler Output-Pane, anderem Schnickschnack und möchte daneben noch seinen IM-Client und die Playlist im Auge behalten können.
  • Drucken! Ist der Code breiter als ~79 Zeichen wird in der Regel umgebrochen (was sonst, abgeschnitten ist eine noch schlechtere Option) was praktisch die Grenze zur Unlesbarkeit überschreitet, wenn man nicht auf 9 Punkt Schriftgröße ausweichen will. Ich habe die Erfahrung gemacht, dass von Haus aus Ausdrucke von Textdateien in dicktengleichen Schriftarten wie z.B. Courier in so ziemlich der gleichen Schriftgröße und letztlich Zeichenbreite ausgedruckt werden. Würde auch Sinn machen, denn da besteht ja eine historische Verbindung zu den Terminals.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 6. März 2007, 07:59

Hi!

Ich hatte mich gestern irgendwo im Code festgefressen. Deshalb habe ich die wichtigsten Bereiche des Codes ausgedruckt und bequem im Sofasessel noch einmal studiert -- und den Fehler gefunden. 8)

Wie schön, dass mein Code bei 80 Zeichen umgebrochen wurde, sonst hätte ich den Code im Querformat ausdrucken müssen. :roll:

Das waren ja so schon 40 Seiten. Ich möchte gar nicht wissen, wieviele es im Querformat geworden wären...

Auch hier im Forum ist es eher schlecht, wenn man breiteren Code postet, da man dann ständig hin und her scrollen muss, damit man den Code lesen kann.

Und was die Diskussion um Tabulatoren und Leerzeichen angeht: Nimm vier (4) Leerzeichen und einen guten Editor, der dir beim Druck auf die Tabulator-Taste vier Leerzeichen ausspuckt.
Ich hatte mich am Anfang auf drei Leerzeichen eingeschossen, da ich denke, dass drei Leerzeichen gerade genug sind, um Einrückungen gut zu erkennen, aber das habe ich mir schnell wieder abgewöhnt und bin auf vier Leerzeichen zurück gekommen, da ich Schwierigkeiten hatte, Code mit anderen zu teilen oder Codebeispiele wiederzuverwenden. Entweder musste ich meinen Code, oder den Beispielcode anpassen. Das wurde mir auf die Dauer zu lästig. Diese Arbeit fällt weg, wenn **alle** Python-Programmierer gemeinsam vier Leerzeichen verwenden. So ist die Usance und sollte von allen eingehalten werden.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Dienstag 6. März 2007, 08:16, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 6. März 2007, 08:08

EOL 79, das sehen die django Jungs aber leider anders :? Siehe http://code.djangoproject.com/browser/django/trunk

Wobei unter http://www.djangoproject.com/documentat ... ding-style nichts darüber steht.

Ich bleibe bei 80 Zeichen.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 6. März 2007, 12:03

jens hat geschrieben:EOL 79, das sehen die django Jungs aber leider anders :? Siehe http://code.djangoproject.com/browser/django/trunk

Die django Leute haben keinen Styleguide der EOL abdeckt. Die meisten haben EOL 79, adrian schreibt aber drüber hinaus.

pocoo hat EOL 90
TUFKAB – the user formerly known as blackbird
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Dienstag 6. März 2007, 14:23

PEP 8 is t3h Law!

Und das sagt: EOL 79, keine Tabs, vier Leerzeichen Einrückung. Und gerade bei Python hat man ja nun wirklich nicht die Ausrede, man wüsste von keinem Styleguide oder nicht, welchen man nehmen sollte.
dst
User
Beiträge: 27
Registriert: Mittwoch 28. Februar 2007, 23:42

Beitragvon dst » Dienstag 6. März 2007, 15:56

Tja, dann werde ich wohl auch 4 Leerzeichen benutzen, allerdings nur weil dies bereits der Konsens ist und es gerade bei Python einleuchtet, dass alle auf den gleichen Standard setzen.

Die meisten restlichen Argumente halte ich nach wie vor zumindest für zweifelhaft oder sogar umkehrbar.

Naja, dann muss ich mal gucken, wie ich vim dazu bringe für Python auf Leerzeichen zu setzen. Hat jemand ne Ahnung, wie man bei vim-Scripting die aktive Sprache ausliest?
Also irgendwie sowas in die .vimrc:

Code: Alles auswählen

if irgendwas =~ "python"
    set expandtab
    set shiftwidth=4
    set softtabstop=4
    set tabstop=4
endif
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 6. März 2007, 16:09

vielleicht hilft [wiki]Python-Programmieren mit Vim[/wiki]weiter?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Beitragvon Mad-Marty » Dienstag 6. März 2007, 16:10

Ich benutze zum beispiel 3 leerzeichen.
Wichtig ist einfach nur das du es konsistent machst.
IDEs erkennen das meist auch.

Tabs sind imo schlecht, weil es u.U. schlecht lesbar ist
Auserdem sind 80 zeichen schon sinnvoll, klar wenns mal auf 84 geht weils umgebrochen noch schlimmer wäre, dann ok.

Aber man sollte es zumindest versuchen unter 80 zu bleiben.

Und am besten du benutzt eine IDE wie WingIDE, dann kannst du bequem tabs zu spaces und umgekehrt konvertieren.
(Anmerkung für vim freunde: vim ist keine IDE :p )
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 6. März 2007, 16:12

Mad-Marty hat geschrieben:Ich benutze zum beispiel 3 leerzeichen.
Wichtig ist einfach nur das du es konsistent machst.

Wenn du closed source machst, ok... Wenn aber andere deinen Code auch benutzten sollen, dann ist es besser, man hat überall die selbe Einrückung... Ansonsten muß man beim codemischen immer die Leerzeichen anpassen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]