Skip to content

Commit d82f27e

Browse files
lilhammerfunjinzhongjia
authored andcommitted
docs(loop): 改进 while 循环 continue 表达式章节
重写 continue 表达式的说明,结合基本示例中的死循环问题, 解释 continue 表达式的执行时机和作用。
1 parent 0d7832a commit d82f27e

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

course/basic/process_control/loop.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,26 @@ for 循环是另一种循环处理方式,主要用于迭代数组和切片。
9898

9999
### `continue` 表达式
100100

101-
`while` 循环还支持一个被称为 `continue` 表达式的机制,以便于我们控制循环。其内部可以是一个语句或一个代码块(由 `{}` 包裹)。
101+
`while` 循环的条件之后可以用冒号 `:` 跟一个括号来声明 **`continue` 表达式**,它会在**每轮循环体结束后、下一轮条件判断之前**自动执行:
102+
103+
<<<@/code/release/loop.zig#while_continue_fix
104+
105+
每轮循环的执行顺序是:
106+
107+
1. 检查条件 `i < 10`
108+
2. 执行循环体
109+
3. 执行 `continue` 表达式 `i += 1`
110+
4. 回到第 1 步
111+
112+
相信看到这里,细心的读者可能已经发现了,在上面的 while 基本使用示例中,当循环执行到 `i == 5` 时,**代码会陷入死循环**
113+
114+
`continue` 表达式会帮助我们完美地避开这个问题,不难发现,即使循环执行到 `i == 5` 时,`i` 的自增仍然会在 `continue` 表达式内执行。
115+
116+
:::info 🅿️ 提示
117+
唯一不执行 `continue` 表达式的情况是 `break`,因为 `break` 直接退出整个循环。
118+
:::
119+
120+
另外,`continue` 表达式可以是单个语句,也可以是多个语句(用 `{}` 包裹),示例如下:
102121

103122
:::code-group
104123

course/code/15/loop.zig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,20 @@ const WhileBasic = struct {
171171
};
172172

173173
const WhileContinue = struct {
174+
const std = @import("std");
175+
174176
pub fn main() void {
177+
{
178+
// #region while_continue_fix
179+
// 将while语句的基础代码用continue表达式改写
180+
var i: usize = 0;
181+
while (i < 10) : (i += 1) {
182+
if (i == 5) continue;
183+
std.debug.print("i is {}\n", .{i});
184+
}
185+
// #endregion while_continue_fix
186+
}
187+
175188
{
176189
// #region while_continue_1
177190
var i: usize = 0;

0 commit comments

Comments
 (0)