# Anweisung (Programmierung)

Als Anweisung oder Statement (aus englisch statement entlehnt) wird in der Informatik im Bereich der Programmierung ein zentrales Element vieler imperativer Programmiersprachen bezeichnet. Die Programme derartiger Sprachen setzen sich hauptsächlich aus einer oder mehreren Anweisungen zusammen. Eine Anweisung stellt eine in der Syntax einer Programmiersprache formulierte einzelne Vorschrift dar, die im Rahmen der Abarbeitung des Programms auszuführen ist. Wie eine Anweisung syntaktisch auszusehen hat, wird durch die jeweilige Programmiersprache oder deren Spezifikation festgelegt und ist innerhalb eines Programms (üblicherweise) nicht änderbar.
In der maschinennahen Programmierung werden Anweisungen häufig auch als Befehl, Instruktion (aus englisch instruction) oder Kommando (aus englisch command) bezeichnet.
Anweisungen sind üblicherweise Zuweisungen, Kontrollanweisungen (wie Sprünge, Schleifen und bedingte Anweisungen) und Prozeduraufrufe. Abhängig von der Programmiersprache sind teilweise auch Zusicherungen, Deklarationen, Klassen- und Funktionsdefinitionen Anweisungen.
Im Gegensatz zu Ausdrücken haben Anweisungen nicht immer einen Wert. Einige Anweisungen können jedoch auch Ausdrücke sein, so z. B. Zuweisungen, Inkrementoperatoren oder Funktionsaufrufe. Umgekehrt sind viele Ausdruckstypen wie etwa Vergleiche oder arithmetische Ausdrücke keine syntaktisch vollständigen Anweisungen.
Sequenzen von Anweisungen werden häufig in Blöcken zusammengefasst.

## Beispiele

| Assembler-Anweisung | MOV AX,BX |
| Assertion | assert(ptr != NULL); |
| Bedingte Anweisung | if A > 3 then WRITELN(A) else WRITELN("NOT YET") end |
| Block | begin WRITE('Number? '); READLN(NUMBER); end |
| Deklaration | VAR A:INTEGER; |
| Do-while-Schleife | do computation(&i); while (i < 10); |
| For-Schleife | for A:=1 to 10 do WRITELN(A) end; |
| GOTO-Anweisung | goto 1; |
| Initialisierung | TYPE SALARY = INTEGER; oder long i = 0; |
| Return-Anweisung | return 5; |
| Switch-Case-Anweisung | switch (c) { case 'a': alert; break; case 'q': quit; break; } |
| Unterprogrammaufruf | CLEARSCREEN; |
| While-do-Schleife | while NOT EOF DO begin READLN end; |
| Zuweisung | A := A + 1; |
siehe auch Programmiersprachelemente

## Syntax

Das Erscheinungsbild eines Programms ist vom Aussehen der Anweisungen geprägt. Daher werden Programmiersprachen oft nach der Art ihrer Anweisungen unterschieden (z. B. Sprachen mit geschweiften Klammern). Viele Anweisungen beginnen mit einem Bezeichner wie if, while oder repeat. Oft sind die Schlüsselwörter der Anweisungen reserviert, sodass sie nicht als Name einer Variable oder Funktion verwendet werden können. Imperative Programmiersprachen nutzen meist eine spezielle Syntax für ihre Anweisungen, welche sich deutlich von einem Funktionsaufruf unterscheidet. Verbreitete Methoden um die Syntax von Anweisungen zu beschreiben sind Backus-Naur-Form und Syntaxdiagramm.

## Semantik

Semantisch differieren viele Anweisungen von Unterprogrammen durch die Behandlung ihrer Parameter. Normalerweise wird ein tatsächlicher Parameter vor dem Aufruf des Unterprogramms ausgewertet. Dies unterscheidet sich von den Parametern vieler Anweisungen, welche mehrmals (z. B. die Bedingung einer while-Schleife) oder gar nicht (z. B. der Rumpf einer while-Schleife) ausgewertet werden. Technisch gesehen sind solche Anweisungsparameter Closures, welche bei Bedarf ausgeführt werden (siehe auch Lazy Evaluation). Wenn Closure-Parameter für Unterprogramme verfügbar sind, kann das Verhalten einer Anweisung durch Unterprogramme implementiert werden (siehe Lisp). Für Sprachen ohne Closure-Parameter geht die semantische Beschreibung einer Schleife oder Bedingten Anweisung über die Fähigkeit der Sprache hinaus. Deswegen benutzen Spezifikationen oft semantische Beschreibungen in natürlicher Sprache.