bash
作者: 一了 <1liao3@funlang.org>
日期: 2026-11-04
一句话总结: Fun 这几天落了三处语法加法:if、while、for 可用花括号,`end if` 一类块尾可省分号,点号后的保留字当普通成员名。旧写法全保留,例子在 9.5.4 上跑过。
Fun 语法三则:花括号、块尾分号、点号后的关键字
Fun 的核心仓库在这几天落了三处语法改动。都不大,但都会改变每天写代码的手感:if、while、for 多了一种花括号写法;end if 这类块尾可以不带分号;点号后面的保留字可以当普通成员名用。
旧写法一个都没删。下面的例子都在 Fun 9.5.4 上跑过。
一、if / while / for 可以直接用花括号
以前条件分支必须用 then 开头、用 end if 收尾。现在如果只有一个分支,可以写成 if 表达式 { ... }:
bash
var score = 72;
if score >= 60 {
?. 'pass';
}
then 不用写,end if 换成 }。while 和 for 也接受同一种块:
bash
var i = 0;
while i < 3 {
?. i;
i = i + 1;
}
for n = 1 to 3 {
?. n * 10;
}
for name in ['Ada', 'Linus'] {
?. name;
}
输出是:
bash
pass
0
1
2
10
20
30
Ada
Linus
块里再套块也没问题:
bash
for n = 1 to 3 {
if n mod 2 = 1 {
?. n;
}
}
这段只打印 1 和 3。
边界要说清楚:花括号版目前只覆盖单支的 if。需要 else 或 elsif 时,仍然用 then ... end if:
bash
if score >= 60 then
?. 'pass';
else
?. 'fail';
end if
if ... { ... } else ... 这种混写现在还不成立,单独的 loop 也仍然是 loop ... end loop。花括号替换的是条件块的开头和结尾,块里的语句照样要分号;闭括号后面写不写分号都可以。
二、end 后面的分号可以省
从 9.4.9 起,end if、end case、end loop、end do、end try、end fun、end class 后面的分号都可以省略。原来的写法仍然接受。
以前的函数这样收尾:
bash
fun double(n)
return n * 2;
end fun;
现在可以写成:
bash
fun double(n)
return n * 2;
end fun
?. double(21);
省掉的只是 end <block> 后面那一个分号。块里的最后一条语句、end 前面那条语句,分号还在。
这也不是自动分号插入。Fun 不会因为换行就结束一条语句;两条普通语句之间少写分号,仍然会粘在一起。所以能省的地方只有块尾:
bash
if score > 0 then
?. 'positive';
end if
?. 'after if';
这里省掉的是 end if 后面的分号,?. 'positive'; 和 ?. 'after if'; 的分号都不能省。end if; 也还是合法写法,老代码不用改。
三、点号后面的保留字是普通成员名
9.4.9 还改了词法器:. 和 ?. 后面出现保留字时,按成员名处理。JSON、数据库、外部接口里常见的 fun、end、if 字段,现在可以直接点出来:
bash
var row = new [];
row.fun = 'Fun';
row.end = 42;
row.if = true;
?. row.fun; # Fun
?. row.end; # 42
?. row?.if; # True
Fun 的 40 个保留字都能这样用:o.class、o.var、o.while、o.not、o.bit 都行。?. 后面同样适用,像 row?.if 这种可选成员访问不会把 if 当成分支关键字。
软关键字只软在点号后面。fun 出现在语句开头仍然是函数定义,if 出现在条件位置仍然是分支,end 出现在块尾仍然是收尾。换个位置,它们还是关键字。
构造字面量时用字符串键:
bash
var row = ['fun': 'Fun', 'end': 42];
?. row.fun;
?. row['end'];
这样建出来的对象,两种读法都能拿到值。顺带一提,type 不是关键字,它只是标准库里的函数,o.type 本来就不会和词法器打架。
四、旧代码不用改
三处都是加法,不是替换:花括号是新增写法,块尾分号是可省可留,点号后的保留字是放宽。9.4.9 到 9.5.4 之间的代码都能继续跑。
如果只想先试一处,花括号最适合新写的短分支;块尾分号适合把已经写完的代码顺手清一遍;点号后的软关键字,则留给那些字段名绕不开保留字的外部数据。