Zig 语言提供了多种循环结构,用于执行重复操作,常见的循环包括:

  • while 循环
  • for 循环(用于遍历数组、切片等)
  • loop 无限循环
  • breakcontinue 控制循环流程

📖 目录

  1. while 循环
  2. for 循环
  3. loop 无限循环
  4. break 退出循环
  5. continue 跳过本次循环
  6. 带标签的循环
  7. 参考资料

1. while 循环

while 循环在条件满足的情况下持续执行,适用于条件控制的场景。

🔹 语法

while (条件) : (继续执行代码) {
    // 循环体
}

🔹 示例

var i: i32 = 0;

while (i < 5) {
    std.debug.print("i = {}\n", .{i});
    i += 1;
}

输出:

i = 0
i = 1
i = 2
i = 3
i = 4

⚠️ 注意

  • while 的条件必须返回 bool 类型,否则编译器会报错。
  • 避免死循环,确保条件能够在循环内变化。

2. for 循环

for 循环用于遍历数组、切片、元组(tuples)、结构体等,适用于数据迭代的场景。

🔹 语法

for (集合) |item| {
    // 处理 item
}

🔹 遍历数组

const arr = [_]i32{10, 20, 30, 40};

for (arr) |value| {
    std.debug.print("Value: {}\n", .{value});
}

输出:

Value: 10
Value: 20
Value: 30
Value: 40

🔹 遍历数组(带索引)

for (arr, 0..) |value, index| {
    std.debug.print("Index: {}, Value: {}\n", .{index, value});
}

输出:

Index: 0, Value: 10
Index: 1, Value: 20
Index: 2, Value: 30
Index: 3, Value: 40

  • 0.. 代表索引从 0 开始递增,可以用于获取索引。
  • for 不能用于普通整数范围,必须是可迭代的集合。

3. loop 无限循环

loop 语句创建无限循环,通常需要配合 break 使用,否则会导致死循环。

🔹 语法

loop {
    // 代码
}

🔹 示例

var counter: i32 = 0;

loop {
    std.debug.print("Counter: {}\n", .{counter});
    counter += 1;
    if (counter == 5) break;
}

输出:

Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4

⚠️ loop 必须手动 break,否则会进入死循环!


4. break 退出循环

break 用于立即终止当前循环,无论循环条件是否仍然满足。

🔹 示例

var x: i32 = 0;

while (x < 10) {
    if (x == 5) break; // 当 x 等于 5 时,退出循环
    std.debug.print("x = {}\n", .{x});
    x += 1;
}

输出:

x = 0
x = 1
x = 2
x = 3
x = 4


5. continue 跳过本次循环

continue 用于跳过本次循环的剩余部分,直接进入下一次循环

🔹 示例

var i: i32 = 0;

while (i < 5) {
    i += 1;
    if (i == 3) continue; // 跳过 3
    std.debug.print("i = {}\n", .{i});
}

输出:

i = 1
i = 2
i = 4
i = 5

解释

  • i == 3 时,continue 跳过 print 语句,直接进入下一次循环。

6. 带标签的循环

Zig 允许在循环前加 : 标签(Label),用于 breakcontinue 退出特定的外部循环。

🔹 示例

outer: while (true) {
    var j: i32 = 0;
    
    while (j < 3) {
        std.debug.print("j = {}\n", .{j});
        if (j == 1) break :outer; // 直接跳出外部 `while`
        j += 1;
    }
}

输出:

j = 0
j = 1

解释

  • break :outer; 直接跳出 outer 循环,而不是 while (j < 3) 内部循环。

7. 参考资料


🔹 总结

语法说明
while (条件) {}条件为 true 时执行
`for (集合)item
loop {}无限循环(需要 break 退出)
break终止循环
continue跳过当前循环,执行下一次
break :label退出特定循环

Zig 提供灵活的循环机制,适用于不同的场景,在使用时要避免死循环,合理利用 breakcontinue 进行流控制! 🚀