Skip to main content

控制结构

控制结构(control)提供了函数提前返回(early return)、循环退出(break)和继续(continue)等带有明显流程控制的特性。

需要注意的是,控制结构只能在以下位置使用:

  • 函数定义
  • 类方法定义
  • 实例方法定义

无法在以下情况使用

  • Lambda 表达式语句块
  • Try 语句块

这是因为 RowScript 是一个相对推荐表达式(expression-first)的语言,用户可以将 lambda 表达式语句块、try 语句块封装成额外的函数定义,而不推荐将这些细微的结构因为控制结构变得臃肿。哦对了,事实上实现起来也比较困难 🤪。

If

If 语句又叫做守卫(guard)语句,提供了简单的 ifelse 分支,并且用户能在分支中使用 return 退出函数。

function f(): number {
if (true) {
console.log("ok");
} else {
return 42
}

1 + 1
}

用户可省略 else 分支:

function f(): number {
if (true) {
return 42
}

1 + 1
}

Fori

Fori 循环类似 JavaScript,是最常见的循环结构之一:

function f(): number {
for (let i = 0; i < 10; i = i + 1) {
console.log(i);

if (false) {
break;
}

if (true) {
continue;
}

return 42
}

1 + 1
}

之所以叫做“fori”这个名字,是因为 i 通常作为循环变量的名称,并且 fori 是许多 IDE 或编辑器的代码模板关键词。

Forof

Forof 循环同样类似 JavaScript,如果一个结构符合 迭代协议,那么 forof 循环可以用于迭代一个结构的成员:

function f() {
const a = [1, 2, 3];
for (const x of a) {
console.log(x);
}
}

Forof 循环中同样可以使用 breakcontinuereturn 语句。 实际上,forof 循环是 fori 循环的语法糖,以上的代码等同于:

function f() {
const a = [1, 2, 3];
const it = a.iter();
for (const r = it.next(); r.isOk(); r = it.next()) {
const x = r.unwrap();
console.log(x);
}
}

While

While 循环同样类似 JavaScript,while 循环中也可以使用 breakcontinuereturn 语句:

function f() {
while (true) {
console.log("okay");
}
}