Einrückungsstil

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche

Als Einrückungsstil (engl. indent style) wird die Art und Weise bezeichnet, Quelltext von Programmen zwecks Lesbarkeit einzurücken und umschließende Syntax-Elemente wie geschweifte Klammern {} zu positionieren. Als alternativer Name ist daher auch manchmal „Klammerstil“ (engl. brace style) anzutreffen.

Für die Programmiersprache C gibt es vier verbreitete Einrückungsstile, die auch in Programmiersprachen mit C-ähnlicher Syntax wie C++, Java, ECMAScript, Perl oder C# übernommen wurden.

Die Positionierung der geschweiften Klammern ist wahrscheinlich das umstrittenste Element eines Programmierstils.

Inhaltsverzeichnis

[Bearbeiten] Elemente des Einrückungsstils

Der Einrückungsstil bezieht sich auf:

  • Positionierung umschließender Syntax-Elemente, insbesondere {} und ()
  • Tiefe der Einrückung
  • Verwendung von Leerzeichen vor { und (
  • Verwendung von Tabulatorzeichen zur Einrückung

Häufig wird empfohlen, einen Quelltext nicht so zu formatieren, dass die Einrückung erst mit einer Veränderung der Tabulatorschrittweite auf einen anderen Wert sichtbar wird, z. B. 4 statt 8 Zeichen. Die allermeisten Editoren rücken als Voreinstellung den Tabulator um 8 Leerzeichen ein. Um Probleme in der Darstellung in Bezug auf die Tabulatorschrittweite gänzlich zu vermeiden, raten die meisten Einrückungsstile von der Verwendung von Tabulatorzeichen grundsätzlich ab.

[Bearbeiten] Positionierung umschließender Syntax-Elemente

Umschließende Syntax-Elemente sind solche Syntax-Elemente einer Sprache, die zur Gruppierung einer unbestimmten Zahl von Elementen dienen, nicht ausschließlich aber insbesondere dann, wenn sich die Elemente über mehrere Quelltextzeilen erstrecken. In Sprachen mit C-ähnlicher Syntax, z. B. C++, Java und C#, in Sprachen mit Pascal-ähnlicher Syntax, z. B. Modula-2, Oberon und Cluster sowie einigen weiteren Sprachen fällt diesen Elementen bei der Gestaltung eines Quelltextes in Bezug auf seine Syntax und seine Lesbarkeit eine zentrale Bedeutung zu.

[Bearbeiten] Positionierung in Pascal

Pascal-ähnliche Sprachen verwenden zur Umschließung eigens dafür definierte Schlüsselworte, meist BEGIN, DO und END. In der Praxis wird eine Positionierung dieser Elemente nur selten diskutiert, meist wird sie so vorgenommen, wie von Niklaus Wirth in der Literatur vorgeführt. Dabei steht BEGIN noch in der Einrückung des äußeren Blocks auf einer eigenen Zeile, DO dagegen wird am Ende der vorherigen Zeile zusammen mit dem das DO benötigende Statement geschrieben. Der Inhalt des durch BEGIN oder DO eingeleiteten Blocks wird bis ausschließlich zum END eingerückt. Das END steht ausgerückt, d. h. in der Einrückung des äußeren Blocks schließlich wieder auf einer eigenen Zeile.

Beispiel: Positionierung der umschließenden Syntax-Elemente in Oberon

PROCEDURE Add(VAR x, y: INTEGER)
BEGIN
  WHILE (y != 0) DO
    y := y - 1;
    x := x + 1;
  END
END Add;

[Bearbeiten] Positionierung in C

C-ähnliche Sprachen verwenden zur Umschließung ein Paar von geschweiften Klammern { und }. Für die Positionierung sind in der Praxis vier Stile besonders weit verbreitet, von denen jedoch keiner als der dominante Stil bezeichnet werden kann. Mehr im Abschnitt Bekannte Einrückungsstile.

[Bearbeiten] Positionierung in XML- und SGML-basierten Sprachen

In XML- und SGML-basierten Sprachen, z. B. HTML, hat sich durchgesetzt, die Inhalte von Elementen zwischen Start-Tag und End-Tag einzurücken. Für Attribute findet man immer häufiger eine mehrzeilige Aufteilung, besonders, wenn Übersichtlichkeit gefragt ist.

Beispiel: Einrückung in einem XHTML-Quelltext

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    <head>
        <title>Einrückung in XML</title>
    </head>
    <body>
        <h1>Einrückung in XML</h1>
        <p>
            Dieses Dokument ist ein Beispiel für Einrückung in XML / SGML.
            <br />
            In diesem Beispiel beträgt die Einrückungstiefe 4 Leerzeichen.
        </p>
    </body>
</html>

Beispiel: Einrückung in einem Ant-Quelltext

<?xml version="1.0"?>
<!--
  - Daimonin Editor build file
  -->
<project
    name    = "Daimonin Editor"
    default = "compile"
>
    <target
        name        = "compile"
        description = "compile Daimonin Editor"
    >
        <javac
            srcdir   = "src"
            destdir  = "classes"
            encoding = "utf-8"
            source   = "1.5"
            target   = "1.5"
            debug    = "no"
        />
    </target>
</project>

[Bearbeiten] Einrückungstiefe

Die Einrückungstiefe bestimmt, wie weit der Inhalt eines Blocks eingerückt wird. Besonders weit verbreitet sind Einrückungstiefen um 4 oder 8 Leerzeichen, aber auch 2 oder 3 Leerzeichen ist nicht selten anzutreffen. Letztendlich stellt die Einrückungstiefe einen Kompromiss zwischen einer durch große Einrückungstiefe möglichst deutlichen Sichtbarkeit der Einrückung einerseits und einer möglichst großen erhaltenen Zeilenlänge andererseits dar. Die erhaltene Zeilenlänge lässt sich wie folgt berechnen: erhaltene Zeilenlänge = Zeilenlänge - Schachtelungstiefe * Einrückungstiefe. Bei einer Zeilenlänge von 80 Zeichen, einer Einrückungstiefe von 4 Leerzeichen und einer Schachtelungstiefe von 3 Ebenen beträgt die erhaltene Zeilenlänge also noch 68 Zeichen.

Beispiel: Java-Quellext mit Einrückungstiefe 2 Leerzeichen

 public class Hello {
   public static void main(String... args) {
     if (args.length > 0) {
       for (String arg : args) {
         System.out.println("Hello, " + arg + "!");
       }
     } else {
       System.out.println("Hello, world!");
     }
   }
 }

Beispiel: Java-Quelltext mit Einrückungstiefe 4 Leerzeichen

 public class Hello {
     public static void main(String... args) {
         if (args.length > 0) {
             for (String arg : args) {
                 System.out.println("Hello, " + arg + "!");
             }
         } else {
             System.out.println("Hello, world!");
         }
     }
 }

Beispiel: Java-Quelltext mit Einrückungstiefe 8 Leerzeichen

 public class Hello {
         public static void main(String... args) {
                 if (args.length > 0) {
                         for (String arg : args) {
                                 System.out.println("Hello, " + arg + "!");
                         }
                 } else {
                         System.out.println("Hello, world!");
                 }
         }
 }

Wie man sieht, nimmt mit wachsender Einrückungstiefe die deutliche Sichtbarkeit der Einrückung zu, die Zeilen werden jedoch länger, was bei einer begrenzten Textbreite weniger Platz für Ausdrücke innerhalb einer Zeile lässt.

[Bearbeiten] Verwendung von Tabulator oder Leerzeichen

Die Einrückung eines Quelltextes lässt sich in den meisten Programmiersprachen wahlweise mit Leerzeichen oder mit Tabulator vornehmen. Die meisten Compiler sehen darin keinen Unterschied, die Wahl bleibt also dem Programmierer überlassen.

Es gibt jedoch Argumente, die für oder gegen eine Einrückung mit Leerzeichen bzw. Tabulator sprechen. Für eine Einrückung mit Leerzeichen spricht, dass die Einrückungstiefe grundsätzlich gleich bleibt und die Einrückung so stets erkennbar ist, unabhängig davon, welche Tabulatorschrittweite verwendet wird. Für eine Einrückung mit Tabulator spricht, dass sich jeder Entwickler selbst die Tabulatorschrittweite einstellen und somit seine persönliche Einrückungstiefe bestimmen kann. Gegen eine Verwendung des Tabulators spricht zusätzlich noch das unterschiedliche Verhalten unterschiedlicher Programme in Bezug auf das Tabulatorzeichen. Einige Programme ersetzen das Tabulatorzeichen einfach durch eine eingestellte Anzahl von Leerzeichen (meist 8), während andere Programme am Tabulatorzeichen auf die nächste ohne Rest durch 8 teilbare Spalte auffüllen, was zu unterschiedlicher Darstellung führen kann.

Beispiel: Auffüllung (Tabulator mit Schrittweite 8 vor =-Zeichen)

start   = 0;
end     = 20;

Beispiel: Ersetzung (Tabulator mit Schrittweite 8 vor =-Zeichen)

start        = 0;
end        = 20;

Sowohl von Befürwortern der Leerzeicheneinrückung als auch von Befürwortern der Tabulatoreinrückung wird eine Mischung beider Einrückungen aber grundsätzlich abgelehnt. Sie führt beim Austausch von Quelltexten unweigerlich zu Problemen bei der Darstellung der Einrückung, wenn unterschiedliche Tabulatorschrittweiten verwendet wurden.

Beispiel: Quelltext mit gemischter Einrückung (sowohl Tabulator als auch Leerzeichen), der mit einer Tabulatorschrittweite von 4 erstellt und 8 angezeigt wurde

 public class Hello {
     public static void main(String... args) {
                 if (args.length > 0) {
             for (String arg : args) {
                 System.out.println("Hello, " + arg + "!");
             }
                 } else {
             System.out.println("Hello, world!");
                 }
         }
 }

Die Darstellung könnte durch eine Umstellung der Tabulatorschrittweite korrigiert werden. Für einige wenige Editoren, z. B. vim, lassen sich in den Quelltexten Steuerinformationen unterbringen, die den Editor automatisch auf die verwendete Tabulatorschrittweite stellen. Diese Editoren stellen jedoch die Ausnahme dar, außerdem mangelt es an einem einheitlichen Standard für solche Einstellungen. Ohne diese Möglichkeiten muss der Programmierer bei gemischten Quelltexten jeden Quelltext optisch betrachten, die Tabulatorschrittweite erraten und entsprechend neu einstellen.

[Bearbeiten] Siehe auch

Programmierstil, Quelltextformatierung, Syntaxhervorhebung

[Bearbeiten] Einzelnachweise


[Bearbeiten] Weblinks

Persönliche Werkzeuge
Buch erstellen