跳到主要内容

语句

语法​

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 只是一个其语句为另一个 if 的 else,因此可以构成链。悬空的 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 …。标准替代写法见流程控制惯用写法。

块​

{ ... } 可以在任何需要单条语句的位置(包括顶层)将多条语句组合在一起。它不会开启新的变量作用域。