Java Reference
In-Depth Information
Seiteneffektfreie Funktionen führen zu besser lesbaren und weniger fehleranfälligenden Program-
men. Definieren Sie eine boolesche Funktion linksFrei also immer folgendermaßen:
boolean linksFrei() {
linksUm();
if (vornFrei()) {
rechtsUm();
return true;
} else {
rechtsUm();
return false;
}
}
void rechtsUm() {
linksUm();
linksUm();
linksUm();
}
Wenn Sie - aus welchem Grund auch immer - dennoch Seiteneffekte produzierende Funktionen
definieren, sollten Sie auf jeden Fall durch einen Kommentar darauf hinweisen.
Mögliche durch boolesche Funktionen hervorgerufene Seiteneffekte führen dazu, dass die folgenden
beiden Anweisungen nicht unbedingt semantisch äquivalent sein müssen. Dabei sei bA Platzhalter
für einen beliebigen booleschen Ausdruck und anweisung1 und anweisung2 seien Platzhalter für
beliebige Anweisungen:
// Anweisung 1
// Anweisung 2
if (bA)
if (bA)
anweisung1
anweisung1
else
if (!bA)
anweisung2
anweisung2
Mit Hilfe der Seiteneffekte lässt sich dieses Phänomen nun auch verstehen. Konkretisieren wir die
Anweisungen dadurch, dass wir für bA die oben definierte einen Seiteneffekt produzierende boole-
sche Funktion linksFrei verwenden und die beiden Anweisungen a1 und a2 durch die Leeran-
weisung ersetzen:
// Anweisung 1
// Anweisung 2
if (linksFrei())
if (linksFrei())
;
;
else
if (!linksFrei())
;
;
Werden die Anweisungen jeweils in der in Abbildung 11.7 (a) skizzierten Situation aufgerufen, so
ergibt sich nach Ausführung von Anweisung 1 der in Abbildung 11.7 (b) und nach Ausführung von
Anweisung 2 der in Abbildung 11.7 (c) dargestellte Zustand. Die beiden Zustände sind nicht gleich,
die Anweisungen also nicht semantisch äquivalent.
Search WWH ::




Custom Search