Ziglings 笔记 11: While 循环基础

重复的力量

在掌握了变量和判断之后,Ziglings 的第 11 个练习带我进入了循环 (Loops) 的领域。计算机最擅长的事情就是不知疲倦地重复工作,而 while 是实现这一点的最基本工具。

挑战:指数增长

任务要求我们打印出 2 的幂次方(2, 4, 8…),直到数字达到 1024 为止。我们需要填写正确的循环条件。

解决方案

这是我的代码实现:

const std = @import("std");

pub fn main() void {
    var n: u32 = 2;

    // 循环条件:只要 n 小于 1024 就继续执行
    while (n < 1024) {
        // 打印当前数字
        std.debug.print("{} ", .{n});

        // 将 n 翻倍
        n *= 2;
    }

    // 循环结束后打印最终结果
    std.debug.print("n={}\n", .{n});
}

核心知识点总结

1. while 的纯粹性

Zig 的 while 循环非常标准:先检查条件,如果为真则执行块内代码,然后再回过头检查条件。 有趣的是,Zig 没有传统的 C 风格 for (int i=0; i<n; i++) 循环。在 Zig 中,这种逻辑通常用 while 或者特定的迭代器 for 来实现。

2. 严格的布尔检查

再次强调,Zig 不允许模糊的条件判断。

  • while (n) ... // 编译错误
  • while (n > 0) ... // 正确

3. 可以在任何地方声明变量

虽然这个练习没用到,但我了解到 Zig 的 while 实际上支持更高级的功能,比如 while (iter.next()) |item| { ... },这允许在条件判断的同时捕获值,处理 Optional 类型非常方便(这在后续练习中应该会遇到)。


后续预告:基本的循环搞定了,但如果我想在循环中间跳过某次执行,或者提前退出循环该怎么办?下一篇我们将学习 continue 和 break。