langShift

錯誤處理與型別安全

學習 Rust 的錯誤處理機制,包括 Result、Option 型別和錯誤傳播,對比 JavaScript 的異常處理

錯誤處理與型別安全

📖 學習目標

理解 Rust 的錯誤處理哲學,學會使用 ResultOption 型別,掌握錯誤傳播模式,對比 JavaScript 的異常處理機制。


🎯 錯誤處理哲學對比

JavaScript 的異常處理

JavaScript 使用 try-catch 機制處理異常:

正在加载...

Rust 的錯誤處理

Rust 使用型別系統處理錯誤,沒有異常機制:

正在加载...

錯誤處理差異

  1. 異常 vs 型別: JavaScript 使用異常,Rust 使用型別系統
  2. 執行時 vs 編譯時: JavaScript 執行時檢查,Rust 編譯時檢查
  3. 可恢復 vs 不可恢復: Rust 區分可恢復錯誤(Result)和不可恢復錯誤(panic)
  4. 顯式 vs 隱式: Rust 強制顯式處理錯誤,JavaScript 可以忽略異常

📦 Option 型別

處理可能為空的值

正在加载...

🔄 Result 型別

處理可能失敗的操作

正在加载...

🎯 錯誤處理最佳實踐

錯誤處理模式對比

正在加载...

進階錯誤處理函式庫

在實際專案中,為了更方便地定義和處理錯誤,Rust 社群提供了許多優秀的錯誤處理函式庫,例如:

  • thiserror: 用於簡化自定義錯誤型別的定義,特別是當錯誤需要包含額外資訊或從其他錯誤型別派生時。它透過巨集自動實現 DisplayError trait。
  • anyhow: 用於簡化錯誤傳播,特別是在應用程式層程式碼中。它提供了一個簡單的 Result 型別別名 anyhow::Result<T>,並允許你輕鬆地將各種錯誤型別轉換為 anyhow::Error

這些函式庫可以大大減少錯誤處理的樣板程式碼,提高程式碼的可讀性和可維護性。


🎯 練習題