Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion course/basic/process_control/loop.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,26 @@ for 循环是另一种循环处理方式,主要用于迭代数组和切片。

### `continue` 表达式

`while` 循环还支持一个被称为 `continue` 表达式的机制,以便于我们控制循环。其内部可以是一个语句或一个代码块(由 `{}` 包裹)。
`while` 循环的条件之后可以用冒号 `:` 跟一个括号来声明 **`continue` 表达式**,它会在**每轮循环体结束后、下一轮条件判断之前**自动执行:

<<<@/code/release/loop.zig#while_continue_fix

每轮循环的执行顺序是:

1. 检查条件 `i < 10`
2. 执行循环体
3. 执行 `continue` 表达式 `i += 1`
4. 回到第 1 步

相信看到这里,细心的读者可能已经发现了,在上面的 while 基本使用示例中,当循环执行到 `i == 5` 时,**代码会陷入死循环**。

而 `continue` 表达式会帮助我们完美地避开这个问题,不难发现,即使循环执行到 `i == 5` 时,`i` 的自增仍然会在 `continue` 表达式内执行。

:::info 🅿️ 提示
除了 break 以外,return 也会导致 continue 表达式不执行,因为它们都会直接跳出循环。
:::

另外,`continue` 表达式可以是单个语句,也可以是多个语句(用 `{}` 包裹),示例如下:

:::code-group

Expand Down
13 changes: 13 additions & 0 deletions course/code/15/loop.zig
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,20 @@ const WhileBasic = struct {
};

const WhileContinue = struct {
const std = @import("std");

pub fn main() void {
{
// #region while_continue_fix
// 将while语句的基础代码用continue表达式改写
var i: usize = 0;
while (i < 10) : (i += 1) {
if (i == 5) continue;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

为了与该文件中的其他 if 语句风格保持一致,建议为 if 块添加大括号。

                if (i == 5) {
                    continue;
                }

std.debug.print("i is {}\n", .{i});
}
// #endregion while_continue_fix
}

{
// #region while_continue_1
var i: usize = 0;
Expand Down
Loading