Ausdrucksorientierte Programmiersprache
Ausdrucksorientiertheit (von englisch expression-oriented) ist eine Eigenschaft mancher Programmiersprachen bzw. ein Paradigma für das Design derselben. Sprachen mit dieser Eigenschaft zeichnen sich dadurch aus, dass fast jede Konstruktion einen gültigen Ausdruck ergibt, der deshalb mutatis mutandis auch einen Rückgabewert hat. Typische Ausnahmen von diesem Grundsatz sind dabei Makrodefinitionen, Präprozessorkommandos und Deklarationen, die ausdrucksorientierte Sprachen oft als Anweisungen und nicht als Ausdrücke behandeln. In einigen ausdrucksorientierten Programmiersprachen existiert ein Rückgabewert vom Typ void. Ausdrücke, die diesen ergeben, werden dann lediglich wegen ihrer Nebenwirkungen genutzt.
Beispiele für ausdrucksorientierte Programmiersprachen sind Algol 68 und Lisp, während hingegen etwa Pascal keine ausdrucksorientierte Sprache ist. Alle funktionalen Programmiersprachen sind ebenfalls ausdrucksorientiert.
Kritik
BearbeitenManche Sprach-Designer führen eine ganze Klasse von Programmierfehlern auf Expression Orientation zurück, insbesondere solche, wo ein Programmierer eine Zuweisung mit dem Test auf Gleichheit verwechselt bzw. verwechselbar macht.[1] Die angeführte Quelle benennt als Beispiel:
if ( c++ = d++ )
…
und gibt als korrekte Alternative an:
if ( ( c++ = d++ ) != 0 )
…
Um derartige Verwechslungen zu vermeiden, unterscheidet sich in den Algol-ähnlichen Programmiersprachen die Zuweisung syntaktisch vom Vergleich: alle Zuweisungsoperatoren enthalten die Zeichenfolge :=
, kein Vergleichsoperator enthält einen Doppelpunkt. Das obige Beispiel lautet in Algol 68:
if (c +:= 1) = (d +:= 1) then …
In Ada und Java sind aus diesem Grund Ausdrücke in Kontrollstrukturen auf solche eingeschränkt, die boolesche Rückgabewerte haben.[2][3]
Hingegen wird in Python eine alternative Strategie verwandt: Zuweisungen haben die Form von Anweisungen, nicht von Ausdrücken. Dadurch werden Zuweisungen innerhalb von anderen Anweisungen oder Ausdrücken unterbunden.[4]