BlogKontaktTagcloud

Else-If-Konstrukt

Else-If ist syntaktisch gesehen ein sehr interessantes Programmierkonstrukt. Zumal es in den meisten Sprachen gar nicht existiert, aber erst einmal von vorne.

Else-If dient dazu mehrere If's aneinander zu hängen. Das bringt gegenüber einzelnen If's einen Performance-Vorteil, ausserdem kann so wenn keine Bedienung zutrifft in einen else-Block gesprungen werden. Häufig kann anstelle von langen if-Konstrukten auch ein Switch verwendet werden, dies hat jedoch teilweise gewisse Limitierungen. Zum Beispiel kann in Java ein Switch nur für einfache Typen verwendet werden. Ohne Elseif sieht das dann etwa so aus:
if ($a > $b) {
echo "a is bigger than b";
}
if ($a == $b) {
echo "a is equal to b";
}
if ($a < $b) {
echo "a is smaller than b";
}
In PHP wird elseif zusammengeschrieben und ist ein eigenes Sprachkonstrukt. Das obige Beispiel sieht dann etwa so aus und reduziert die Überprüfungen im Idealfall auf eine und im schlechtesten Fall auf zwei (anstelle von drei):
if ($a > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo "a is equal to b";
} else {
echo "a is smaller than b";
}

Die geschweiften Klammern können, sofern sie nur ein einzelnes Statement beinhalten weggelassen werden. Dies gilt für die meisten, wenn nicht alle, C-basierenden Sprachen. In PHP kann das ganze zudem noch mit der nachfolgenden, eher merkwürdigen Syntax (nicht zu empfehlen) verwendet werden:

if ($a == 5):
echo "a equals 5";
echo "...";
elseif ($a == 6):
echo "a equals 6";
echo "!!!";
else:
echo "a is neither 5 nor 6";
endif;

Nun aber der eigentliche Clue, nämlich warum else-if in den meisten Sprach-Syntaxen gar nicht existiert und auch nicht zu existieren braucht am Beispiel von C++. Zuerst ein einfaches If:

if(a < b){
doASmallerB();
}
Nach C++-Standard ist der gesamte Block, ebenso wie der Aufruf der Methode doASmallerB, ein Statement. Nun ein if-Block mit einem Else:
if(a < b)
doASmallerB();
else
doBSmallerEqualsA();

Anstelle vom Aufruf von doBSmallerEqualsA kann nun jedes beliebige Statement stehen. Und mit jedem Beliebigen ist natürlich auf ein If-Statement gemeint. Toll! Das sieht dann so aus:

if(a < b)
doASmallerB();
else
if(a > b) {
doABiggerB();
}

Womit wir dann, mit ein bisschen Umformatieren, bereits ein else-if konstruiert hätte. Natürlich lässt sich das beliebig so fortsetzen.

Ähnliche Beiträge:
PHP Quine
What's php like?
Zend Framwork 1.5 is out
Coding Contest addicted
Coding Contest
Comments (0)  Permalink

comments

add a comment

The Trackback URL to this comment is:
http://leo.freeflux.net/blog/plugin=trackback(1811).xml

This blog is gravatar enabled.
Your email adress will never be published.
Comment spam will be deleted!

Name*
E-Mail
For Spammers Only
URL
Kommentar*
E-Mail Benachrichtigung bei neuen Kommentaren zu diesem Eintrag
Speichere meine Daten (braucht Cookies)