iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

有時候會需要寫一些比較複雜的多層迴圈程式,但這時如何要使用 breakcontinue 時會沒辦法控制要對哪一層迴圈進行。對於這種情況,只要爲迴圈打上標籤,就可以明確指定了。

while

只要在 while 前打上 LABEL:,這個 While-loop 就會被標記,隨後只要使用 break: LABELcontinue: LABEL 就可以了

const print = @import("std").debug.print;

pub fn main() void {
    outer: while (true) {
        var val: u16 = 0;

        while (true) {
            print("Value: {}\n", .{val});
            val += 1;

            if (val == 4) {
                print("Break\n", .{});
                break :outer;
            }
        }
    }
}
Value: 0
Value: 1
Value: 2
Value: 3
Break

for

For-loop 也是相同的方式。

const print = @import("std").debug.print;

pub fn main() void {
    outer: for (1..100) |_| {
        for (1..10) |i| {
            print("Value: {}\n", .{i});
            if (i == 4) {
                print("Break\n", .{});
                break :outer;
            }
        }
    }
}
Value: 0
Value: 1
Value: 2
Value: 3
Break

Block

Zig 的區塊 Block 可以作爲表達式回傳值。

這個範例提供一個類似 C/C++ 的 #ifdef 預處理器條件編譯的寫法。

const print = @import("std").debug.print;

const DEBUG = false;

pub fn main() void {
    const mode = blk: {
        if (DEBUG) {
            break :blk "Debug";
        } else {
            break :blk "Production";
        }
    };

    print("Running in {s} mode", .{mode});
}
Running in Production mode

參考

本文以 Zig 0.13.0 爲主。並同時發佈在:


上一篇
Zig:編譯期 Comptime
下一篇
Zig:迭代器(Iterator)
系列文
Zig 語言入門指南——聽説你是現代化的 C30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言