用了沒多久之後,Teddy強烈感受到「插屁屁」的必要性。為什麼PDA手機這麼容易當機 ?! 好像時空倒轉,回到當年那 Windows 3.0/3.1 藍底白字的時代,需要不斷的按下 reset 按鈕。
軟體出問體導致電腦當機的原因當然很多,其中有一項常見的現象,就是忽略例外 (ignoring exceptions)。妥善的處理在程式中所發生的例外 (exceptions),將可增強軟體系統的強固性 (robustness)。簡單的說,就是寫出來的軟體比較不容易「當」。但是,例外處理 (exception handling) 在軟體開發中,一直是個被忽略的一環。對許多程式設計師而言,開發功能需求 (functional requirements) 的時間都不夠了,哪來的閒工夫來設計例外處理。
耶,那麼當程式遇到例外時該怎麼辦 ? 你可能會想,「 嘿嘿,很簡單的啦。只要把例外捉起來 (catch) 然後直接忽略不就好的啦 (有點窩藏犯人的嫌疑)。反正寫程式的是我,我不講老闆也不會知道的啦 。」稍微負責一點的程式設計師可能會把補抓到的例外寫到 log 中,直接列印出來,或是交給程式最外圍 (通常是啟動該程式的函數,例如 main,或是某個 thread ) 的物件來處理。
好把,就算你是一位有理想、有抱負的程式設計師,打算大展身手好好修理一下這些在程式中不請自來的不速之客,但是,要怎麼做 ? 這時候你可能用力回想一下,距今N年前的學生時代,有什麼課有教我們例外處理? 耶,好像沒有。沒關係,身為一位有理想、有抱負的程式設計師,身邊隨時帶著幾本程式語言的書也是很正常的。先翻翻 VB這一本,再看看 C# 這一本,還有C++, Java。奇怪,怎麼好像除了把這個燙手山芋 (例外) 往外丟 (re-throw),或是直接印到 console 上,就沒什麼特別的處理方法了。 此時,你內心吶喊著:「萬能的天神,請賜予我神奇的力量,讓我好好地處理這些該死的例外吧!」
日後Teddy將撰寫一系列有關例外處理的文章。這個主題是Teddy博士論文研究的一部份,其實裡面也沒什麼偉大的理論,不過是將現今分散在不同學科中,關於例外處理的方法做一些整理。以下列出一些參考文獻,這些資料對於如何處理例外有很實際的建議,有興趣的人可以找來看一下。
參考資料
- J. Bloch, Effective Java Programming Language Guide, Prentice Hall PTR, 2001.
- J. Shore, “Fail Fast,” IEEE Software, vol. 21, no. 5, 2004, pp. 21-25.
- S. Stelting, Robust Java: Exception Handling, Testing and Debugging, Prentice Hall PTR, 2005.
- R. Wirfs-Brock, “Designing for Recovery,” IEEE Software, vol. 23, no. 4, July/August 2006, pp.11-13.
- R. Wirfs-Brock, “Toward Exception-Handling Best Practices and Patterns,” IEEE Software, vol. 23, no. 5, Sep./Oct. 2006, pp.11-13.