【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; // 进入下一轮
}
Rust编程语言群 1036955113
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号