Mario Sedlak
Softwareentwicklung
Software
Computer
Hauptthemen

Strukturiertes Programmieren

Programmcode mit definierten Funktionen und Prozeduren und ohne Sprünge zu bestimmten Zeilennummern ist heute so normal, dass man sich kaum etwas anderes vorstellen kann. Richtigen "Spaghetti-Code" habe ich seit der Zeit des C 64 (zuletzt 1993) nicht mehr gesehen.

Sprünge

Zu weit geht mir die Forderung, eine Schleife oder Funktion niemals mit einem Sprungbefehl (break, exit, return oder dgl.) verlassen zu dürfen. Der Sprungbefehl erscheint mir in vielen Fällen übersichtlicher und vermeidet Redundanz durch die Wiederholung von Bedingungen.

Ausdrücke

Hinzufügen würde ich die Forderung, dass auch umfangreiche Ausdrücke strukturiert werden sollten. Ich staune selbst immer wieder, wie viel einfacher der Code ist, nachdem ich einen großen Ausdruck in kleinere Zwischenergebnisse aufgeteilt habe.

Vgl. z. B.

str = replace(str, urlRel, replace(Matches1(0).SubMatches(0), "|", "_") & ".htm")

und

id = Matches1(0).SubMatches(0)
id = replace(id, "|", "_")
urlLocal = id & ".htm"
str = replace(str, urlRel, urlLocal)

Verzweigungen

Nicht wirklich "verboten", aber häufig kritisiert werden umfangreiche Ansammlungen von Verzweigungen (If-Befehlen). Diese Kritik kann ich nicht nachvollziehen. Ja, ein Code mit vielen Verzweigungen ist komplex, aber das kann wohl daran liegen, dass auch die Wirklichkeit, die dieser Code abbilden soll, komplex ist. Was soll man dagegen tun? Viele verschiedene Objekte mit noch mehr Schnittstellen künstlich erfinden? Ich bezweifle, dass das dann einfacher zu verstehen ist.

Verzweigungen sind mir auch lieber als Schleifen, denn meine Erfahrung zeigt, dass man Schleifen schwerer durchdenken kann. Vgl. folgende Code-Beispiele, die aufeinander folgende Duplikate in einem Array finden.

1. Mit Verzweigung:

For i = 1 to UBound(arr)
  If arr(i)=arr(i – 1) Then
     Wscript.echo "Duplikat gefunden: " & arr(i)
  End If
Next

2. Nur mit Schleifen:

i = 1
While i<UBound(arr)
  While i<UBound(arr) and arr(i)<>arr(i – 1)
     i = i + 1
  WEnd
  While i<UBound(arr) and arr(i)=arr(i – 1)
     Wscript.echo "Duplikat gefunden: " & arr(i)
     i = i + 1
  WEnd
WEnd

Weiter

Globale Variablen