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