If Statement Considered Harmful

Vor mittlerweile über 40 Jahren schrieb Edsger Dijkstra seinem Aufsatz Go To Statement Considered Harmful. Darin ruft er dazu auf, das goto-Statement nicht mehr zu verwenden und stattdessen strukturiert zu programmieren, was u.a. bedeutet, dass man sich auf die drei Kontrollanweisungen Sequenz, Auswahl (if) und Wiederholung (Schleifen) beschränken soll, d.h. nicht wild im Code herum springt. Das ist mittlerweile auch größtenteils anerkannt, d.h. goto wird mittlerweile sehr sparsam und wenn, dann nur in begründeten Ausnahmefällen eingesetzt.

Geht es jetzt auch dem if-Statement an den Kragen? Die Anti-If Campaign(via) scheint nun genau das vor zu haben.

Was ist da jetzt dran? Prinzipiell haben sie vollkommen recht: Das if-Statement wird oftmals dazu benutzt, „den passenden Code zu finden“. Sowas in der Art:

1
2
3
4
5
6
7
8
enum mode = (mCopy, mMove);

...

if mode = mCopy then
  copySomething();
else if mode = mMove then
  moveSonething();

oder anderes Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Spielfigur
begin
  method GehWeiter();
  begin
    if istAnWand then
    begin
      Aua();
    else if istAnTür then
      if TürIstOffen then
        gehDurchTür();
      else
        SchließeTürAuf();
    end if;
  end method;
end class;

Mit Mitteln der OOP kann man solche Konstrukte vermeiden und seinen Code dadurch übersichtlicher, wartbarer und flexibler machen.

Don’t write code to find code.

Das if-Statement ist also weiterhin unabdingbar notwendig, jedoch kann man es „falsch“, d.h. nicht OOP-mäßig einsetzen. Wenn man Code, wie oben skizziert verwendet, ist wohl ein Teil des Entwurfs nicht wirklich objektorientiert. Aus Unwissenheit, Faulheit oder aber weil man einen guten Grund dazu gefunden hat (den es im Einzelfall durchaus geben mag).

Die Anti-If Campaign finde ich also prinzipiell gut, denn sie benennt oft gemachte Fehler. Allerdings ist die Website noch etwas mickrig. Es findet sich bisher nur ein Artikel (und der ist auch schon zweieinhalb Monate alt) und besonders umfangreich ist er auch nicht (genauso wenig wie der Blog-Post hier 😉 ). Es befindet sich dort zwar ein Formular zum Einsenden von Beispielcode, das wird aber scheinbar nicht genutzt. Und ich hab auch keine Zeit da jetzt was raus zu suchen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert