Tabs versus Spaces

Fr, 19. November 2021, Ralf Hersel

Wenn Blasen-Outsider diesen Artikel lesen würden, wäre ihre Reaktion ein irritiertes Kopfschütteln. Wie kann man nur über ein derart unbedeutendes Thema schreiben? Aber egal, wir sind hier (leider) in der Blase. Die Frage, ob man Tabulatoren oder Leerzeichen verwendet, hängt vom Einsatzzweck ab. Um es vorweg zu nehmen, ich bevorzuge in allen Fällen Tabs gegenüber Spaces.

Anhand dreier Beispiele zeige ich, warum man mit Tabulatoren immer besser beraten ist, als mit Leerzeichen:

Texte

Beim Einsatz von Textverarbeitungsprogrammen (LibreOffice Writer, usw.), ist die Entscheidung einfach. Wer Abstände mithilfe von Leerzeichen erzeugt, outet sich als Anfänger. Warum? Weil Leerzeichen vom gewählten Font abhängen, und somit keinen definierten horizontalen Abstand erzeugen können. Hier ein Beispiel:

In der ersten Zeile wird dieselbe Anzahl an Leerzeichen verwendet, jedoch die Schriftgrösse verändert. Die Abstände sind dadurch unterschiedlich gross, weil die Leerzeichen auch der Schriftart und Schriftgrösse unterliegen. In der zweiten Zeile habe ich Tabulatoren mit einem Abstand von 2 cm verwendet. Hier bleiben die Abstände gleich, obwohl sich die Schriftgrösse ändert. Das liegt daran, dass Tabulatoren unabhängig von der Schriftart und Schriftgrösse sind.

Speicherbedarf

Dass Leerzeichen mehr Speicher verbrauchen als Tabulatoren, liegt auf der Hand: 10 Spaces sind 10 Bytes, 1 Tab ist 1 Byte. Selbst wenn man Komprimierung ins Spiel bringt, schneiden die Tabs besser ab: 10 Spaces sind 10x1 Space; das benötigt immer noch mehr Speicherplatz als das eine Byte für den Tab. Zugegeben, das ist unbedeutend bei normalen Textmengen, summiert sich jedoch bei langen Texten.

Die Idee zu diesem Artikel kam mir, als ich diesen Beitrag gelesen habe: https://edjopato.de/post/2021/11/18-tabs-spaces/. Dort wird der Speicherbedarf ausführlicher beschrieben.

Programmierung

Kommen wir zum Elefanten im Raum: PEP8. Das ist der Style Guide für Python Code; sozusagen der heilige Gral für alle Python-Programmiererinnen. Da die Python-Syntax stark von der Formatierung des Codes abhängt, hat die Frage nach 'Tab oder Space' eine besondere Bedeutung. Der Style Guide sagt dazu Folgendes:

Spaces are the preferred indentation method.
Tabs should be used solely to remain consistent with code that is already indented with tabs.
Python 3 disallows mixing the use of tabs and spaces for indentation.

Klare Ansage; es sollen Leerzeichen verwendet werden. Tabs sollen beibehalten werden, wenn sie vorher bereits zum Einsatz kamen, um die Konsistenz zu wahren. Eine Mischung von Tabs und Spaces ist keine gute Idee, die vom Interpreter bemängelt wird.

Die grosse Frage ist: warum Spaces? Niemand mag Leerzeichen. Meiner Meinung nach stehen sie der Usability bei der Programmierung fundamental im Wege. Das Problem ergibt sich nicht beim Eintippen der Leerzeichen, weil die IDEs einem diese Arbeit abnehmen: Du tippst ein Tab und die IDE ersetzt es durch 4 Spaces. Welche Ironie ist das denn? Anscheinend weiss es dein Code-Editor besser als der PEP8-Styleguide.

Problematisch werden die Spaces beim späteren Editieren. Hier werden die Spaces nämlich nicht wie Tabs behandelt, sondern erfordern einige Tasteneingaben, um sie wieder loszuwerden. Bei einem Tab machst du ein Delete oder einen Backspace, um sich ihrer zu entledigen. Bei Spaces braucht man 4 oder 8 Tasteneingaben dafür. Ein weiterer Vorteil von Tabs liegt in der höheren Flexibilität. Falls mir die Einrückungen im Code zu gross oder klein erscheinen, muss ich nur die Breite der Tab-Definition ändern, anstatt alle Leerzeichen anzupassen.

Ich lasse mich jedoch gerne von euch überzeugen, warum PEP8 recht hat.