學到這裡,你應該已經能寫出功能完整、不報錯的 Rust 程式,但 Rust 不只是一門「能跑就好」的語言,它還鼓勵你去追求「語意一致的優雅」。
所謂「Rust 風格(Rust idiom)」,不是語法炫技,而是讓程式的意圖更清楚、邏輯更安全、結構更穩定。
以下這幾個觀念,是你從「寫得對」邁向「寫得漂亮」的門檻。
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(())
}
每一行都表示「這步成功才繼續」,語意比縮排明確得多。
在試寫階段大家都喜歡 unwrap(),但在專案中這會是炸彈。
Rust idiom 的原則是:程式不該因預期錯誤而崩潰。
把 unwrap() 換成 ? 或明確錯誤處理:
let config = read_to_string("config.json")
    .map_err(|e| AppError::Io(e.to_string()))?;
unwrap() 是學 Rust 的捷徑,也是離開初學者階段的第一道坎。
Option 與 Result,而非 bool 與 nullRust 不用 null 是一種哲學選擇。
當你開始以 Option<T> 與 Result<T, E> 思考,就會自然寫出更穩定的介面。
例如,設計 API 時與其回傳 bool,不如回傳:
fn try_login(user: &str) -> Result<Session, LoginError>
bool 告訴你成敗;Result 告訴你原因。
而 idiomatic Rust 在意的正是「語意清晰的錯誤流」。
Rust 鼓勵用型別、結構體與 enum 來表達狀態,而不是用 flag 與數字判斷。
與其寫:
if state == 1 { /* logged in */ }
不如寫:
enum State { Guest, LoggedIn(User) }
這樣程式就能讓「不合法狀態」根本無法編譯。
Rust idiom 不是更複雜,而是讓錯誤消失在編譯期。
在 Rust 世界裡,「可讀」的程式不是註解多,而是讓人不用看註解。
一個 idiomatic Rust 函式通常具備三個特徵: