Strukturierung durch Einrückung

Blöcke

Blocks

Ein Block ist eine Gruppe von Anweisungen in einem Programm oder einem Skript. Üblicherweise besteht er aus wenigstens einer Anweisung und Deklarationen für den Block, abhängig von der Skript- oder Programmiersprache. Eine Sprache, die die Strukturierung mit Blöcken ermöglicht, wird als strukturierte Programmiersprache bezeichnet. Im allgemeinen können Blöcke wieder Blöcke enthalten, d.h. wir erhalten verschachtelte Blockstrukturen. In einem Skript oder einem Programm dienen Blöcke auch dazu mehrere Anweisungen so zu gruppieren, dass sie wie eine Anweisung behandelt werden können. Außerdem werden Blöcke auch dazu genutzt, den Geltungsbereich von Variablen und Funktionen einzuschränken.

In einfachen Programmiersprachen wie Basic und Fortran gab es ursprünglich keine explizite Möglichkeit Blockstrukturen zu nutzen. Programmierer mussten sich auf "goto"-Konstrukte beschränken. Heutzutage sind "goto"s in der Programmierung verpönt, weil "Go to"-Programme zu Spaghetti-Code tendieren, d.h. die Kontrollstrukturen sind verwoben und verwickelt und meistens dadurch in ihrer Struktur und ihrem Zusammenspiel nur schwer zu durchschauen.

Zum ersten Mal wurden Blockstrukturen in ALGOL verwendet. Sie wurden als "compound statement" bezeichnet.

Programmier- und Skriptsprachen benutzen verschiedene Methoden, Anweisungen zu Blöcken zusammenzufassen:

  • begin ... end ALGOL, Pascal und andere Ein Codefragment in Pascal, was die Benutzung von Blöcken in dieser Programmiersprache zeigt:
      with ptoNode^ do
      begin
        x := 42;
        y := 'X';
      end;
    
  • do ... done and if... fi z.B. Bourne- und Bash-Shell
  • Geschweifte Klammern: { ... } In den meisten Programmier- und Skriptsprachen werden wohl geschweifte Klammern zur Strukturierung verwendet, so wie in C, C++, Perl und Java. Im folgenden Beispiel sehen wir eine bedingte Anweisung in C:
      if (x==42) {
    
      printf("The Answer to the Ultimate Question of Life, the Universe, and Everything\n");
    
    } else {
      printf("Just a number!\n");
    
    } </pre> Man beachte, dass die Einrückungen in dem obigen C-Programm zur Kompilierung nicht notwendig sind. Man könnte den Code - gegen alle Programmierästhetik - auch wie folgt schreiben:
      if (x==42) {printf("The  Answer to the Ultimate Question of Life, the Universe, and Everything\n");} else {printf("Just a number!\n");}
    
    Man sollte sich dieses Beispiel gut merken, um die Vorteile von Python, über die wir im folgenden sprechen werden, besser zu verstehen!

Python-Blöcke durch Einrückungen

Ablaufdiagramm einer Schleife

Das Strukturierungsprinzip von Python unterscheidet sich deutlich von anderen Programmiersprachen. Wie eingangs bereits beschrieben, strukturieren andere Programmiersprachen ihre Programmblöcke durch Schlüsselwörter, wie beispielsweise "begin", "end", "do", "done" oder geschweifte Klammern. Leerzeichen, Folgen von Leerzeichen oder Einrückungen sind für die Compiler und Interpreter von den meisten Programmiersprachen ohne jede Semantik, d.h. sie werden überlesen. Dennoch wird Programmierern aber immer empfohlen, Blöcke durch gleichmäßge Einrückungen für menschliche Benutzer besser verständlich zu machen. In Python ist dies nun gänzlich anders. Hier haben Leerzeichen eine Bedeutung. Die Einrückung von Zeilen und die Benutzung von Leerzeichen am Anfang von Zeilen dienen hier als Strukturierungselement, so dass Programmierer "gezwungen" werden übersichtlichen Code zu schreiben, wenn sie ein lauffähiges Programm unter Python entwickeln wollen. Ein häufiges Strukturierungselement sind Anweisungen, die sich aus einem Anweisungskopf und einem Anweisungskörper zusammensetzen, wie z.B. die while- und die for-Schleife.

Anweisungskopf:
    Anweisung
     .
    Anweisung

Wesentlich sind hierbei der Doppelpunkt am Ende des Anweisungskopfes und die gleichmäßige Einrückung der zugehörigen Anweisungen.

Im Folgenden präsentieren wir ein vollständiges Python-Programm, damit wir ein konkretes Beispiel mit Blöcken sehen können. Anfänger werden dieses Programm noch nicht verstehen können. Wir möchten Ihnen lediglich ein Beispiel eines strukturierten Programmes zeigen. Übrigens handelt es sich bei dem Programm um einen Algorithmus der Pythagoreische Tripel berechnet. Sie finden eine Erklärung der Pythagoreische Tripel in unserem Kapitel über for-Schleifen.

from math import sqrt
n = input("Maximal Number? ")
n = int(n)+1
for a in range(1,n):
    for b in range(a,n):
        c_square = a2 + b2
        c = int(sqrt(c_square))
        if ((c_square - c**2) == 0):
            print(a, b, c)

Es gibt einen weiteren Aspekt der Strukturierung in Python, den wir bisher nicht erwähnt haben und den Sie im Beispiel sehen können. Schleifen und bedingte Anweisungen enden mit einem Doppelpunkt ":" - das Gleiche gilt für Funktionen und andere Strukturen, die Blöcke einführen. Alles in allem Python-Strukturen durch Doppelpunkte und Einrückungen.