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.