Zum Hauptinhalt springen

Anweisungen

Grammatik​

program = { statement } ;
statement = assignment | exprStmt | block | ifStmt | forStmt | ";" ;
assignment = identifier "=" expression ";" ;
exprStmt = expression ";" ; (* result discarded, e.g. a builtin call *)
block = "{" { statement } "}" ;
ifStmt = "if" "(" expression ")" statement [ "else" statement ] ;
forStmt = "for" "(" identifier "=" expression ";"
expression ";"
identifier "=" expression ")" statement ;
expression = see the precedence table under Operators ;
call = identifier "(" [ expression { "," expression } ] ")" ;

Zuweisung​

name = expression; ist eine Anweisung, kein Ausdruck. Daher sind a = b = 1;, if (x = 5) und f(x = 1) allesamt Fehler. Es gibt keine Verbundzuweisung (+=) und kein ++/--. Schreiben Sie i = i + 1;.

Ausdrucksanweisungen​

Jeder Ausdruck, auf den ; folgt, ist eine Anweisung, und sein Wert wird verworfen. So wird eine integrierte Funktion wegen ihrer Wirkung aufgerufen: WindowMinimize(w);. Der Bool, den die meisten integrierten Funktionen zurückgeben, wird ignoriert, sofern Sie ihn nicht auffangen: ok = FileDelete(p);.

if / else​

Die Klammern um die Bedingung sind erforderlich. Der Zweig ist eine einzelne Anweisung oder ein { }-Block. else if ist einfach ein else, dessen Anweisung ein weiteres if ist, daher funktionieren Ketten. Ein freistehendes else gehört zum nächstgelegenen if. Verwenden Sie geschweifte Klammern, wenn das mehrdeutig ist.

n = MathRandom(1, 100);
if (n < 10) {
size = "small";
} else if (n < 50) {
size = "medium";
} else {
size = "large";
}
if (n == 42) UtilityPrint("the answer"); // Zweig mit einer Anweisung, ohne geschweifte Klammern

for​

for (init; condition; step) body. Alle drei Teile sind erforderlich. init und step müssen jeweils eine einzelne Zuweisung name = expression sein, ohne kommagetrennte Listen und ohne alleinstehende Aufrufe. condition ist ein beliebiger Ausdruck und wird vor jedem Durchlauf geprüft, auch vor dem ersten. step wird nach jedem Durchlauf ausgeführt.

for (i = 10; i > 0; i = i - 2) {
UtilityPrint(StringFormat("{0}", i, "")); // 10 8 6 4 2
}

Das ist die einzige Schleife. Es gibt kein while, do, break, continue oder for x in …. Die üblichen Ersatzformen stehen unter Muster für den Programmablauf.

Blöcke​

{ ... } gruppiert Anweisungen überall dort, wo eine einzelne Anweisung erwartet wird, auch auf oberster Ebene. Ein Block öffnet keinen neuen Gültigkeitsbereich für Variablen.