控制结构
控制结构(control)提供了函数提前返回(early return)、循环退出(break)和继续(continue)等带有明显流程控制的特性。
需要注意的是,控制结构只 能在以下位置使用:
- 函数定义
 - 类方法定义
 - 实例方法定义
 
无法在以下情况使用:
- Lambda 表达式语句块
 - Try 语句块
 
这是因为 RowScript 是一个相对推荐表达式(expression-first)的语言,用户可以将 lambda 表达式语句块、try 语句块封装成额外的函数定义,而不推荐将这些细微的结构因为控制结构变得臃肿。哦对了,事实上实现起来也比较困难 🤪。
If
If 语句又叫做守卫(guard)语句,提供了简单的 if 和 else 分支,并且用户能在分支中使用 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 循环中同样可以使用 break、continue、return 语句。 实际上,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 循环中也可以使用 break、continue、return 语句:
function f() {
    while (true) {
        console.log("okay");
    }
}