錯誤處理與型別安全
學習 Rust 的錯誤處理機制,包括 Result、Option 型別和錯誤傳播,對比 JavaScript 的異常處理
錯誤處理與型別安全
📖 學習目標
理解 Rust 的錯誤處理哲學,學會使用 Result 和 Option 型別,掌握錯誤傳播模式,對比 JavaScript 的異常處理機制。
🎯 錯誤處理哲學對比
JavaScript 的異常處理
JavaScript 使用 try-catch 機制處理異常:
正在載入編輯器...
Rust 的錯誤處理
Rust 使用型別系統處理錯誤,沒有異常機制:
正在載入編輯器...
錯誤處理差異
- 異常 vs 型別: JavaScript 使用異常,Rust 使用型別系統
- 執行時 vs 編譯時: JavaScript 執行時檢查,Rust 編譯時檢查
- 可恢復 vs 不可恢復: Rust 區分可恢復錯誤(Result)和不可恢復錯誤(panic)
- 顯式 vs 隱式: Rust 強制顯式處理錯誤,JavaScript 可以忽略異常
📦 Option 型別
處理可能為空的值
正在載入編輯器...
🔄 Result 型別
處理可能失敗的操作
正在載入編輯器...
🎯 錯誤處理最佳實踐
錯誤處理模式對比
正在載入編輯器...
進階錯誤處理函式庫
在實際專案中,為了更方便地定義和處理錯誤,Rust 社群提供了許多優秀的錯誤處理函式庫,例如:
thiserror: 用於簡化自定義錯誤型別的定義,特別是當錯誤需要包含額外資訊或從其他錯誤型別派生時。它透過巨集自動實現Display和Errortrait。anyhow: 用於簡化錯誤傳播,特別是在應用程式層程式碼中。它提供了一個簡單的Result型別別名anyhow::Result<T>,並允許你輕鬆地將各種錯誤型別轉換為anyhow::Error。
這些函式庫可以大大減少錯誤處理的樣板程式碼,提高程式碼的可讀性和可維護性。