iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0

學到這裡,你應該已經能寫出功能完整、不報錯的 Rust 程式,但 Rust 不只是一門「能跑就好」的語言,它還鼓勵你去追求「語意一致的優雅」。

所謂「Rust 風格(Rust idiom)」,不是語法炫技,而是讓程式的意圖更清楚、邏輯更安全、結構更穩定

以下這幾個觀念,是你從「寫得對」邁向「寫得漂亮」的門檻。

1. 拒絕 if let Some(...) 地獄:用 ? 傳遞錯誤

剛開始寫 Rust 時,你可能會充滿這樣的程式:

if let Some(v) = maybe_value {
    if let Ok(data) = parse(v) {
        do_something(data);
    }
}

雖然能動,但太多巢狀結構會讓人看不出意圖。

Rust 的風格是用 ? 讓錯誤自然往上拋:

fn process() -> Result<(), MyError> {
    let v = maybe_value.ok_or(MyError::Missing)?;
    let data = parse(v)?;
    do_something(data);
    Ok(())
}

每一行都表示「這步成功才繼續」,語意比縮排明確得多。

2. 不要「到處 unwrap」

在試寫階段大家都喜歡 unwrap(),但在專案中這會是炸彈。

Rust idiom 的原則是:程式不該因預期錯誤而崩潰。

unwrap() 換成 ? 或明確錯誤處理:

let config = read_to_string("config.json")
    .map_err(|e| AppError::Io(e.to_string()))?;

unwrap() 是學 Rust 的捷徑,也是離開初學者階段的第一道坎。

3. 擁抱 OptionResult,而非 boolnull

Rust 不用 null 是一種哲學選擇。

當你開始以 Option<T>Result<T, E> 思考,就會自然寫出更穩定的介面。

例如,設計 API 時與其回傳 bool,不如回傳:

fn try_login(user: &str) -> Result<Session, LoginError>

bool 告訴你成敗;Result 告訴你原因。

而 idiomatic Rust 在意的正是「語意清晰的錯誤流」。

4. 結構比流程重要

Rust 鼓勵用型別、結構體與 enum 來表達狀態,而不是用 flag 與數字判斷。

與其寫:

if state == 1 { /* logged in */ }

不如寫:

enum State { Guest, LoggedIn(User) }

這樣程式就能讓「不合法狀態」根本無法編譯。

Rust idiom 不是更複雜,而是讓錯誤消失在編譯期。

5. 可讀性來自意圖,而非註解

在 Rust 世界裡,「可讀」的程式不是註解多,而是讓人不用看註解。

一個 idiomatic Rust 函式通常具備三個特徵:

  • 型別明確表達責任;
  • 控制流簡短;
  • 錯誤處理一致。

上一篇
Day 28|Rust 學習資源與工具
下一篇
Day 30|連滾帶爬
系列文
把前端加速到天花板:Rust+WASM 即插即用外掛30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言