【far 语言】控制流

本文是「far 语言」系列文档之一,总目录见《【far 语言】语言文档目录》。

流程控制

if / else

if (a == 1) {
    b = 2;
} else if (a == 2) {
    b = 3;
} else {
    b = 4;
}

// 单语句可省略花括号
if (a == 1) b = 2;
else b = 3;

for

// 基本结构:初始器; 条件; 执行器
for(long i = 0; i < 10; i++){
    println(i);
}

// 初始器 / 条件 / 执行器都可省略
for(;a < 1;){}
for(;;){}

// 多初始器 / 多执行器用逗号
for(long a = 0, q = 1; a < 100; i++, c++){ ... }

foreach

foreach(k in data){ println(data[k]); }    // k 是 map 的 key
foreach(v in arr){ println(v); }           // v 是数组的元素
foreach(idx, v in arr){ println(idx); }    // idx 是索引(从 0 开始)

while / do-while

while(i++){ a = 1 + 1; }
do{ ... }while(1 == 1);

switch / case

switch (query("material")){
case "cloth":
    n += n * 3 / 10;
    break;
case "steel":
    n -= n * 7 / 10;
    break;
}

when 表达式

比 switch 更强:带返回值,分支内最后一个表达式作为返回值。

// 基本形式:条件 => 分支体(左侧只接受 bool 表达式)
r := when{
    a == 2 => "等于2";
    a in (1,2,3) => "在集合里";
    a in 1..20 => "在区间里";
    !a => println(a);
    _ => "默认";
};
// 带 subject 形式:when(表达式){...}
// 分支体可以是赋值 / 代码块 / 纯表达式 / 纯字符串
static string grade(long score){
    g := "";
    when(score){
        score >= 90 => g = "A";
        score >= 80 => g = "B";
        score >= 70 => g = "C";
        _ => g = "D";
    }
    return g;
}
// 分支体为代码块({} 内可写多条语句,最后一个表达式作为返回值)
r1 := when(a=19){
    a == 2 => { println("分支1"); "two"; };
    a in 1..20 => { println("分支3"); "in-range"; };
    _ => { println("默认"); "default"; };
};
  • 左侧只接受 bool 表达式。
  • _=> 默认分支可选(编译器自动补默认 0)。
  • 分支内变量作用域限于该分支。

区间表达式

a := 9;
if (a in 1..10){ println("在 1..10"); }

in 表达式

"name" in {"name":"张三"}       // map 是否有 key
2 in [1,2,3]                    // 是否在数组中
9 in 1..10                      // 是否在区间内

解构赋值

(a, b) = test();                 // map 或数组解构
(a, b) = [1, 2];                 // 数组解构
(a, b, c, d) = (test(),[1,2],"far",1);   // 元解构
((a,b,c,d) = (test()));          // 外层 () 强制返回 a,可用于 if 判断

break / continue

for(...){
    if (x == 1) break;       // 跳出循环
    if (x == 2) continue;    // 进入下一轮
}
posted @ 2026-09-13 05:05  方东信  阅读(6)  评论(0)    收藏  举报