while
是一種條件迴圈,只要條件符合,就會一直執行。
基本
Zig 的 while
語法和多數語言相同,和 if
一樣,普通的條件式需為明確的 bool
型別(true
或 false
),不支援其它數值隱式轉換。也就是說,無窮迴圈是 while (true) {}
。
1 2 3 4 5 6 7 8 9 10
| const print = @import("std").debug.print;
pub fn main() void { var count: u8 = 10; while (count > 0) { count -= 1; print("{}, ", .{count}); } print("\nEnd", .{}); }
|
1 2
| 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, End
|
continue expression
Zig 有個特別的 continue expression,會在每次 while
迴圈繼續進行後執行,語法為 while () : (CE) {}
,其中 CE
就是 continue expression。請比較這裡和上一個「基本」的輸出差異。
1 2 3 4 5 6 7 8 9
| const print = @import("std").debug.print;
pub fn main() void { var count: u8 = 10; while (count > 0) : (count -= 1) { print("{}, ", .{count}); } print("\nEnd", .{}); }
|
1 2
| 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, End
|
可選值
和 if
一樣,條件式內也可以是 Optional,並搭配 Capture 使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const print = @import("std").debug.print;
pub fn main() void { const a: ?u8 = 10; while (a) |value| { print("value: {}\n", .{value}); break; } print("End\n", .{});
print("-----\n", .{});
const b: ?u8 = null; while (b) |value| { print("value: {}\n", .{value}); break; } print("End\n", .{}); }
|
break
break
會直接跳出迴圈。
1 2 3 4 5 6 7 8 9 10 11 12 13
| const print = @import("std").debug.print;
pub fn main() void { var count: u8 = 10; while (count > 0) { count -= 1; if (count == 5) { break; } print("{}, ", .{count}); } print("\nEnd", .{}); }
|
continue
continue
會跳過迴圈內的剩餘部分,直接開始下一次。
1 2 3 4 5 6 7 8 9 10 11 12 13
| const print = @import("std").debug.print;
pub fn main() void { var count: u8 = 10; while (count > 0) { count -= 1; if (count == 5) { continue; } print("{}, ", .{count}); } print("\nEnd", .{}); }
|
1 2
| 9, 8, 7, 6, 4, 3, 2, 1, 0, End
|
參考
本文以 Zig 0.13.0
為主。並同時發佈在: