iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

while 是一種條件迴圈,只要條件符合,就會一直執行。

基本

Zig 的 while 語法和多數語言相同,和 if 一樣,普通的條件式需爲明確的 bool 型別(truefalse),不支援其它數值隱式轉換。也就是說,無窮迴圈是 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,
End

continue 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
-----
End

break

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,
End

continue

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 爲主。並同時發佈在:


上一篇
Zig:模式配對 switch
下一篇
Zig:for 迴圈
系列文
Zig 語言入門指南——聽説你是現代化的 C30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言