iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

if 是各種語言的最基本的語法。

基本

Zig 的普通 if 語法使用 ifelse ifelse,且條件需要使用括號 () 包圍。條件式需要是明確的 bool 型別(只能是 truefalse),不存在整數及其它型別的隱式轉換(即不能用 0 代表 false,或 1 代表 true)。

const std = @import("std");

pub fn main() void {
    const a: u8 = 32;
    const b: u8 = 128;

    if (a > b) {
        std.debug.print("A", .{});
    } else if (a < b) {
        std.debug.print("B", .{});
    } else {
        std.debug.print("eq", .{});
    }
}
B

三元運算子

Zig 沒有 C 那樣的三元運算子(Ternary operation)A ? T : F,但是可以直接使用 if-else 來達成相同的效果,也就是說,Zig 的 if 可以作爲表達式(Expressions)。這樣的設計和 Python 有點類似。我個人覺得這樣的可讀性更好,因爲它更接近自然語言,而不是用符號代替意義。

const std = @import("std");

pub fn main() void {
    const a: u8 = 32;
    const b: u8 = 128;

    const c = if (a > b) "A" else "B";

    std.debug.print("{s}", .{c});
}
B

可選值

除了 bool 型別,if 的括號內也可以填入可選型別(Optionals),它會變成判斷其值是否爲 null,並且可以搭配捕獲(Capture)語法來提取子數值。

const std = @import("std");

pub fn main() void {
    var a: ?u8 = 32;
    check(a);

    a = null;
    check(a);
}

fn check(a: ?u8) void {
    if (a) |value| { // Capture
        std.debug.print("Value: {}\n", .{value});
    } else {
        std.debug.print("Value: null\n", .{});
    }
}
Value: 32
Value: null

參考

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


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

尚未有邦友留言

立即登入留言