Baumelndes Else
aus Wikipedia, der freien Enzyklopädie
Das Problem des baumelnden else ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, welches unter Programmierer-Anfängern leicht für Verwirrung sorgen kann. Das Problem taucht in einigen Programmiersprachen auf, wenn zwei verschachtelten if-Anweisungen nur ein else-Zweig gegenübersteht. Das Problem des baumelnden else kann nur dann auftauchen, wenn eine optionale Klammerung weggelassen wird. Es gibt kein komplementäres Problem, wenn zu viele Klammerungen angegeben werden.
Der Begriff wird meist nicht ins Deutsche übersetzt. Der englische Originalbegriff lautet dangling else.
[Bearbeiten] Beispiel
if (a == 1) if (b == 1) a = 42; else b = 42;
In diesem Beispiel erwartet man intuitiv, dass für den Fall der Variablen b der Wert 42 zugewiesen wird. Der Compiler bezieht den else-Zweig allerdings auf die letzte if-Abfrage. Das Programm wird in dem Fall keine Zuweisung ausführen. Die Lösung des Problems ist die Klammerung der äußeren if-Anweisung:
if (a == 1) { if b == 1 then a = 42; } else b = 42;
Die Beispiele verhalten sich nur für den Fall unterschiedlich.
In einigen Sprachen wird das Problem umgangen, indem jedem 'if' eine "schließende Klammer" zugeordnet werden muss. In der Skriptsprache Bourne Shell steht 'fi' für die schließende Klammer. Der obige Algorithmus lautet dann entweder so:
if [ $a = 1 ] then if [ $b = 1 ] then a = 42 fi b = 42; fi
oder so:
if [ $a = 1 ] then if [ $b = 1 ] then a = 42 fi fi b = 42