Re: [問題] 程式的例外
我曾經看過一個程式
是否有錯誤是採用回傳true or false來表示
boolean execute()
我問他怎麼這樣做?
他表示這樣比較有效率
我反問他
正常的情況下當然要有效率
可是難道發生錯誤也要很有效率嗎
所以就改成
void execute() throws Exception
我看過幾篇文章(我忘記是書還是文章了XD)
提供大家幾個我常用的原則
1.如果不知道怎麼處理例外~那就拋出吧
2.儘可能的只處理例外"一次"或"一種"
3.不要用例外當成業務邏輯的判別方式
4.如果不知道~盡量使用RuntimeException來拋出
首先什麼是例外(樓上有人回文了)
我自己的定義是
如果發生某種狀況使得整個作業或是方法必須停止,則為例外
例如
傳送檔案的時候,突然網路斷掉了,那麼這個狀況將造成整個傳送的作業中止
那麼就需要拋出例外
那麼什麼有編譯或執行
提供方法的API認為該例外有義務提醒使用該API的使用者
需要處理"有意義"的例外,那麼就要在編譯的時候好提醒使用者要注意
(這裡往往有個問題就是,雖然提供者很好心,但使用者往往也不知道該如何處理)
例如買便當的時候
必須要提醒使用者有下列的狀況會發生喔
1.沒有錢
2.買便當的人把錢A了
3.不夠錢買便當
4.便當老闆不賣便當了
5.買便當的人自己把便當吃掉了
以上這些就是自己認為有意義狀況的例外
就會採用編譯期的例外來提醒試使用者要注意(或處理)
但人算不如天算
總會有想不到的狀況會發生
1.買便當的被車撞了
2.買便當的失戀了,所以不上班了
3.買便當的就是不爽幫你買便當啦
4.便當被狗搶走了
5......
有好多 這麼多 非常有夠多的狀況會發生
天下紅雨 娘要嫁人 晚上要看電視 結果卻爆炸了
還是 這個要放在 荷花的左邊
如果你想要預期上述的狀況
那大概你的程式寫到世界末日都還寫不完
(世界末日也是例外喔)
但是這些都有一種特質就是
該狀況都是會中止作業流程的,然後怎麼判別都判別不完
那就通通都拿去做RuntimeException拉
那麼在程式就不用事前去判別拉
(當然你要去判別也是可以)
例外並不是邏輯判別的一部份
那是因為要處理邏輯的時候
在某種狀況發生的時候不可避免的會導致邏輯處理的中止
可是跟邏輯的關係也不是很強烈的情況下
但是還是要處理
那麼就為例外
※ 引述《Shrugg (淚眼問花花不語)》之銘言:
: 想請問一個一直都沒辦法在邏輯上說服自己的觀念性問題
: 參考資料都說,程式的例外是用來擷取runtime時的例外情形,用來攔截例外的發生的.
: 可是要是已經知道會有那些例外可能發生,
: 設計程式時我們不是就會把限制條件給加上去了,
: 根本不用等到例外發生了再來攔截吧?
: Runtime會發生的例外都是設計程式時根本沒想到的,既然沒想到,
: 為什麼會知道要怎麼去預防呢?
: 像旗標的Java2第十四章以一個使用者輸入錯誤當例子,程式例只能輸入數字
: 但當使用者輸入字串時就會是一個例外,所以程式安排這邊設計一個攔截字串例外
: 發生時的處理.
: 但是假設我是這個程式的開發者
: 我要是一開始就知道這個例外的存在,我就會設條件讓使用者不能輸入數字以外的資料了
: 如果我連這個例外都沒有預估到,我又怎麼會知道要去攔截這個例外呢?
: 希望有人知道我在說甚麼
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.29.131
推
04/16 10:04, , 1F
04/16 10:04, 1F
→
04/16 12:34, , 2F
04/16 12:34, 2F
※ 編輯: swpoker 來自: 163.29.28.131 (04/16 14:31)
討論串 (同標題文章)