Die Definition von Ausdruck und Aussage - und selbst wenn es so etwas wie einen oder anderen - ist spezifisch für eine bestimmte Sprache und die Grammatik, die es beschreibt.
Nun, gehen wir:
A Aussage ist einige 'auswertbares Code' dass nicht in einem Ausdruck Kontext erscheint; und
Ein Ausdruck ist Code, der in einem Kontext erscheint, wo der sich ergebende Wert kann durch Substitution des Ausdrucks verbraucht werden.
{A sehr locker 'Definition', aber es gibt keine eine Sprache. Während einige Sprachen streng darauf abzielen, wann Nebenwirkungen auftreten können und nicht auftreten können - und Code, der ohne Ergebnis oder Nebeneffekt ausgeführt wird, ist nutzlos -, glaube ich nicht, dass die Diskussion solcher Unterschiede für die Unterschiede von grundlegender Bedeutung ist.}
Betrachten wir zum Beispiel printf
in C. Dies ist eine Funktion, die Seite eine Nebenwirkung and it returns a value; Normalerweise wird der Rückgabewert ignoriert. Somit kann printf
als erscheinen sowohl eine Aussage
printf("Hello world!");
und einen Ausdruck
if (8 == printf("Hello %s!", name)) { // ..
(A-Funktionsaufruf mit dem Rückgabetyp void
kann nur in einer Erklärung Kontext in C erscheinen, aber dies auferlegt vom Typ System und nicht der Parser.)
Ebenso nehmen Sie diese zwei Zeilen in JavaScript und x = (y = 2);
. x = ..
ist eine Aussage, während y = 2
ein Ausdruck ist, der einen Wert ergab.
In diesen beiden Beispielen sehen wir, dass es die Grammatik Produktion, die, wenn sie als Anweisung behandelt werden oder einen Ausdruck bestimmt ist.
Im Gegensatz Rubin können die 'Top-Level' Zuordnung als Ausdruck behandeln:
[1].map {|x| x = 2}
Lassen Sie uns nun einen Peak nehmen eine Python (2.x). In diesem Fall print
ist eine Aussage, weshalb diese Arbeit und nicht funktionieren, beziehungsweise:
print "Look ma, no parenthesis!"
x = lambda y: print "Whoops!" # invalid, print not an expression
Und was ist bei if
Konstrukte - sind diese Aussagen oder Ausdrücke? Auch hier kommt es auf die insbesondere Sprache. In C und Java sind dies klare Aussagen: Es gibt keine Möglichkeit, einen Ersatz für einen Wert zu verwenden.
Auf der anderen Seite, Scala (und Ruby) erlaubt es, solche Kontrollstrukturen als Ausdrücke verwendet werden, obwohl sie auch als Aussagen erscheinen:
var emotionalResponse = if (color == "green") {
log.cheer()
new Cheering()
} else {
new Tears()
}
Puh. Das ist viel - und es ist nicht annähernd umfassend. Aber zurück zu der "Definition", auf die man bei der Betrachtung der verschiedenen obigen Beispiele so zurückblicken kann:
Wenn das fragliche Konstrukt kann auftreten, wo ein Wert benötigt wird (z. B. auf der rechten Seite) Hand-Seite einer Zuweisung, als ein Funktionsargument, als Eingabe für einen anderen Ausdruck), dann kann als ein Ausdruck behandelt werden; und ist definitiv ein Ausdruck, wenn in einem solchen Kontext. Wenn das Konstrukt an einer Stelle erscheint, an der der Wert nicht durch durch Ersetzung erreicht werden kann, ist es (oder vielmehr, kann als eine Anweisung fungieren).
Eine andere Klasse von Produktionen Zustand Erklärungen, wie eine Funktionsdeklarationen in C oder Klassendefinitionen in Java, und sind wohl keine Aussagen; Da das Folgende bereits so fragmentiert ist, ist dies genau das, was man bekommt.
Die Antwort ist eher philosophisch als praktisch. Anweisungen haben typischerweise Nebenwirkungen, während Ausdrücke in der Regel eher algebraisch sind. In rein funktionalen Sprachen gibt es keine Aussagen. Das heißt, dass sogar diejenigen Dinge, die Nebenwirkungen (zum Beispiel zu einer Datei) ausführen, in Werten ausgedrückt werden, die (idealerweise) alle Mutationen darstellen - einschließlich Fehler. Imperative Sprachen verwenden Anweisungen zum Ausführen von beliebigem Code, z. B. zum Zuweisen eines Werts zu einer Variablen oder zum Drucken auf der Konsole und zum potenziellen Kommunizieren von Fehlern durch Ausnahmeausbreitung. –
Die Unterscheidung hängt davon ab, von welcher Sprache Sie sprechen. In C ist "x = 1" ein Ausdruck und "x = 1;" ist eine Aussage. In Ada ist 'x: = 1 'kein Ausdruck, sondern' x: = 1; 'ist eine Aussage. –