例外處理(exception handling)是軟體系統最大的複雜性來源之一。

處理特殊情況的程式碼本來就比處理正常情況的程式碼更難寫,而開發者又經常不考慮如何處理就到處定義例外。

本章主題#

本章先討論例外為何不成比例地推高複雜度,再示範如何簡化例外處理。

核心教訓:減少必須處理例外的位置數量。

很多時候,可以調整操作的語意,讓「正常行為」涵蓋所有情境,根本沒有特殊條件可報——這正是本章標題的意義。

本章脈絡#

  1. 為什麼例外會增加複雜性
  2. 過多例外的反例
  3. 把錯誤從定義中消除
  4. 屏蔽例外(exception masking)
  5. 例外聚合(exception aggregation)
  6. 該不該直接當掉?
  7. 設計掉特殊情況
  8. 過度應用

結語#

任何形式的特殊情況都讓程式碼變難懂、容易出 bug。

降低必須處理例外的位置,最好的方法依優先順序是:

  1. 重新定義語意,把錯誤條件消除
  2. 對無法消除的例外,在低層屏蔽讓影響範圍最小
  3. 聚合多個特殊情況的處理到單一通用 handler

這些技術合起來能對系統整體複雜度產生顯著影響。