例外處理(exception handling)是軟體系統最大的複雜性來源之一。
處理特殊情況的程式碼本來就比處理正常情況的程式碼更難寫,而開發者又經常不考慮如何處理就到處定義例外。
本章主題#
本章先討論例外為何不成比例地推高複雜度,再示範如何簡化例外處理。
核心教訓:減少必須處理例外的位置數量。
很多時候,可以調整操作的語意,讓「正常行為」涵蓋所有情境,根本沒有特殊條件可報——這正是本章標題的意義。
本章脈絡#
- 為什麼例外會增加複雜性
- 過多例外的反例
- 把錯誤從定義中消除
- 屏蔽例外(exception masking)
- 例外聚合(exception aggregation)
- 該不該直接當掉?
- 設計掉特殊情況
- 過度應用
結語#
任何形式的特殊情況都讓程式碼變難懂、容易出 bug。
降低必須處理例外的位置,最好的方法依優先順序是:
- 重新定義語意,把錯誤條件消除
- 對無法消除的例外,在低層屏蔽讓影響範圍最小
- 聚合多個特殊情況的處理到單一通用 handler
這些技術合起來能對系統整體複雜度產生顯著影響。