Перейти к основному содержимому

Инструкции

Грамматика​

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 } ] ")" ;

Присваивание​

name = expression; — это инструкция, а не выражение. Поэтому a = b = 1;, if (x = 5) и f(x = 1) — ошибки. Составного присваивания (+=) и ++/-- нет. Пишите i = i + 1;.

Инструкции-выражения​

Любое выражение, за которым следует ;, является инструкцией, и его значение отбрасывается. Так встроенная функция вызывается ради её действия: WindowMinimize(w);. Bool, который возвращает большинство встроенных функций, игнорируется, если его не сохранить: ok = FileDelete(p);.

if / else​

Скобки вокруг условия обязательны. Ветвь — одна инструкция или блок { }. else if — это просто else, инструкцией которого является другой if, поэтому цепочки работают. Висячий else относится к ближайшему if. Если это неочевидно, ставьте фигурные скобки.

n = MathRandom(1, 100);
if (n < 10) {
size = "small";
} else if (n < 50) {
size = "medium";
} else {
size = "large";
}
if (n == 42) UtilityPrint("the answer"); // ветвь из одной инструкции, без фигурных скобок

for​

for (init; condition; step) body. Все три части обязательны. init и step должны быть каждая одним присваиванием name = expression, без списков через запятую и без голых вызовов. condition — любое выражение, оно проверяется перед каждым проходом, включая первый. step выполняется после каждого прохода.

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

Это единственный цикл. Нет while, do, break, continue и for x in …. Стандартные замены описаны в разделе Приёмы управления потоком.

Блоки​

{ ... } группирует инструкции везде, где ожидается одна инструкция, в том числе на верхнем уровне. Новую область видимости переменных блок не открывает.