循环(Loops)
循环有四个入口:for 走可迭代值,while 走条件,while val 走条件绑定,repeat 走固定次数。跳出的手段统一是 break 与 continue,复杂嵌套用标签指定跳转目标。
for
for 模式 in 可迭代值 逐个取出元素。迭代变量位是模式,可以直接解构:
var sum = 0;
for i in 1..=10
{
sum += i;
}
print("sum", sum);sum 55范围是半开或闭区间,1..5 走 1 到 4,1..=5 走到 5。带步进用 step 软关键字:
for i in 0..10 step 3
{
print("步进", i);
}步进 0
步进 3
步进 6
步进 9迭代对象是实现 Iterator 的集合、数组、范围或字符串。列表与 Map 的遍历详见类型部分的容器页。
when 守卫
for 可以带 when 条件,不满足的元素直接跳过,等价循环体第一行的 if:
for i in 1..=6 when i % 2 == 0
{
print("偶", i);
}偶 2
偶 4
偶 6repeat
固定次数的循环,当不需要循环变量的时候可以方便使用:
repeat 3
{
print("咚");
}咚
咚
咚括号形 repeat (3) 等价。
while 与 while val
while cond 每轮先测条件。while val 模式 = 表达式 是条件绑定循环:每轮重新求值表达式,按模式测试并绑定,匹配失败即退出:
var n = 1;
while n < 100
{
n *= 3;
}
print("n", n);
var maybe: int? = 3;
var rounds = 0;
while val v = maybe
{
rounds += 1;
if v <= 1
{
maybe = null;
}
else
{
maybe = v - 1;
}
}
print("rounds", rounds);n 243
rounds 3v 在循环体内收窄为 int。maybe 改成 null 后下一轮匹配失败,循环结束。while var 同理。
break、continue 与标签
break 跳出最内层循环,continue 跳过本轮。嵌套循环要跨层时,在外层循环上写 label 名字,break / continue 带同名标签定向跳:
for i in 1..=3 label Outer
{
for j in 1..=3
{
if j == 2
{
continue;
}
if i == 2
{
break Outer;
}
print(i, j);
}
}1 1
1 3i 为 2 时 break Outer 直接终止两层循环,后面的 3 1、3 3 不再执行。
注意
- 范围字面量可以打印,
print(1..5)输出1..5。 - while 条件同样只收 bool。
- 循环变量在循环体外不可见,需要带出结果就用外层变量累加,像上面的
sum。
最后更新于 2026年10月7日
