iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0

先前已經介紹過基本的 forwhile 迴圈用法,這裡來介紹一些更進階的功能和語法。

Loop as Expression

Zig 的迴圈可以作爲表達式(Expression)以回傳值。將 break 當成 return 使用,在後面加上要回傳的值,並加上 else 分支,當迴圈到結束都沒有執行到 break 時會回傳 else 後接的值。

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

pub fn main() void {
    const target = 5;
    const list = [_]u8{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    var index: u8 = 0;

    // Loop as expression
    const value = while (index < list.len) : (index += 1) {
        if (list[index] == target) {
            break true;
        }
    } else false; // 如果到最後都沒有執行到 break 則會回傳 else 的值

    print("{}", .{value});
}
true

內聯 Inline

迴圈也可以加上 inline 使其內聯。但要注意和對函式使用 inline 時一樣,一般來說編譯器會自動做最適合的處理,只有在你明確知道該情況顯式使用 inline 會有更好的效果時再使用,不然多數情況下交由編譯器判斷即可。

這個範例可能不是很適合,實際情況下如何有類似的需求,comptime 可能是更好的選擇。

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

pub fn main() void {
    const max = 10;
    comptime var i = 0;

    var sum: u16 = 0;
    inline while (i <= max) : (i += 1) {
        sum += i;
    }

    print("{}", .{sum});
}
55

參考

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


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

尚未有邦友留言

立即登入留言