2014/12/13 14:42-15:22
最近把Teddy的書【例外處理設計的逆襲】,當作故事書看,休息的時候就會拿出來閱讀一番,當我在閱讀的時候,實驗室的同學們就會很好奇地問說,例外處理是什麼?經過我的解釋之後,他們普遍都認為和return差不多,其實剛開始,我也認為和return error code沒什麼差別,但是經過自己有Java設計程式的經驗加上書中的洗腦,總算能有些體會。
以下是和同學的對話...
同學:「例外處理能幹嘛?」
我:「當你執行Function的時候,有錯誤就會產生例外,例外發生的時候會通知使用API的人。」
同學:「那和回傳錯誤代碼有什麼不一樣,使用API的人透過回傳值就可以知道API有沒有執行成功了啊!」
我:「確實和回傳錯誤代碼沒有什麼不一樣,但是就我目前的體會,有例外處理的程式碼,可讀性會比較高,正常流程區塊的程式碼與錯誤流程區塊的程式碼容易分辨。」
舉個例子,
假設現在有三個Function:FunctionA、FunctionB、FunctionC,這三個Function都有可能會執行失敗,而現在有一個流程,須要這三個Function依序動作,流程才算完成,如果執行過程中,有一個Function出錯就不能繼續往下執行,現在我們依Error code和exception個別寫一段程式碼,程式以Java撰寫。
看完這兩個例子,是否有一點點感覺呢?
在我們想要重新閱讀程式碼的時候,方法2一目了然,很容易找到正常程序的程式碼區塊,當例外發生的時候,FlowException會帶有產生例外的的詳細資訊。
雖然方法1可以更改程式碼架構,能達差不多的效果,但是不管怎麼改,還是需要去判斷它的回傳值,才決定要不要繼續執行下一個Function,而在方法二中,不需要每個Function都逐步檢查,當例外發生的時候,只須要觀察FlowException裡面所帶有的資訊,就知道我們流程哪裡有出錯。
當然例外處理的好處不僅止於這個例子,目前讀了Teddy書有一百頁,書中在討論的時候,常常會出現前幾章的專有名詞,本來對於一堆專有名詞毫無感覺,但讀到現在,總算能區分在書中前幾章就出現的Error、Fault、Failure和Exception間得差異啦!
要說服別人之前,要先說服自己→自己體會到的那些事
最近把Teddy的書【例外處理設計的逆襲】,當作故事書看,休息的時候就會拿出來閱讀一番,當我在閱讀的時候,實驗室的同學們就會很好奇地問說,例外處理是什麼?經過我的解釋之後,他們普遍都認為和return差不多,其實剛開始,我也認為和return error code沒什麼差別,但是經過自己有Java設計程式的經驗加上書中的洗腦,總算能有些體會。
以下是和同學的對話...
同學:「例外處理能幹嘛?」
我:「當你執行Function的時候,有錯誤就會產生例外,例外發生的時候會通知使用API的人。」
同學:「那和回傳錯誤代碼有什麼不一樣,使用API的人透過回傳值就可以知道API有沒有執行成功了啊!」
我:「確實和回傳錯誤代碼沒有什麼不一樣,但是就我目前的體會,有例外處理的程式碼,可讀性會比較高,正常流程區塊的程式碼與錯誤流程區塊的程式碼容易分辨。」
舉個例子,
假設現在有三個Function:FunctionA、FunctionB、FunctionC,這三個Function都有可能會執行失敗,而現在有一個流程,須要這三個Function依序動作,流程才算完成,如果執行過程中,有一個Function出錯就不能繼續往下執行,現在我們依Error code和exception個別寫一段程式碼,程式以Java撰寫。
1.
使用Error code,回傳0代表執行成功:
if(FunctionA() == 0) {
if(FunctionB()
== 0) {
if(FunctionC() == 0) {
// execute successfully
} else{
// FunctionC failed
}
}
else {
//
FunctionB failed
}
}
else{
//
FunctionA failed
}
2.
使用Exception,沒有發生Exception,代表執行成功:
try{
FunctionA();
FunctionB();
FunctionC();
} catch(FlowException e) {
e.printStackTrace();
}
看完這兩個例子,是否有一點點感覺呢?
在我們想要重新閱讀程式碼的時候,方法2一目了然,很容易找到正常程序的程式碼區塊,當例外發生的時候,FlowException會帶有產生例外的的詳細資訊。
雖然方法1可以更改程式碼架構,能達差不多的效果,但是不管怎麼改,還是需要去判斷它的回傳值,才決定要不要繼續執行下一個Function,而在方法二中,不需要每個Function都逐步檢查,當例外發生的時候,只須要觀察FlowException裡面所帶有的資訊,就知道我們流程哪裡有出錯。
當然例外處理的好處不僅止於這個例子,目前讀了Teddy書有一百頁,書中在討論的時候,常常會出現前幾章的專有名詞,本來對於一堆專有名詞毫無感覺,但讀到現在,總算能區分在書中前幾章就出現的Error、Fault、Failure和Exception間得差異啦!
要說服別人之前,要先說服自己→自己體會到的那些事
沒有留言:
張貼留言