Atitit.異常處理 嵌套 冗長的解決方案 1. 異常處理的需要改進的地方1 2. +異常設計的初衷是, 在程式中出現錯誤時, 由程式自己處理錯誤, 儘量不要以exit(0)這種粗暴的方式中止程式. 1 3. 正常流程和異常流程的分離。2 4. “是藥三分毒”, 任何事物有缺點,異常也是2 5. ...
Atitit.異常處理 嵌套 冗長的解決方案
2. +異常設計的初衷是, 在程式中出現錯誤時, 由程式自己處理錯誤, 儘量不要以exit(0)這種粗暴的方式中止程式. 1
1. 異常處理的需要改進的地方
為了表述方便,下麵將主調函數稱為“父函數”,被調函數稱為“子函數”,以“祖”、“父”、“子”、“孫”等來形容函數之間的調用關係。
一個父函數為什麼要調用子函數?因為它知道子函數可以實現某種功能,但父函數根本就不關心子函數是如何實現的,子函數只需向父函數報告結果成功與否。誰知這子函數又調用了孫函數,而這孫函數拋出了一個異常。
那麼這個異常該由誰來處理呢?難道要它的祖函數來處理嗎?根本不可能。祖函數根本就不知道孫函數是個什麼東西,甚至根本不知道有這麼一個孫函數的存在,你讓它如何去處理這個異常?
一個父函數既然調用了子函數,就應該對這個子函數的行為負全部責任,絕不能把子函數造成的結果交給祖函數處理。所以,處理這個異常的只能是該函數的直接調用者,絕不可越級。
異常處理機制的引入,完全破壞了這個原則。於是,一個父函數,它不但必須瞭解子函數的行為,還必須瞭解孫函數、曾孫函數、玄孫函數的種種行為。簡直就是不可能的。
2. +異常設計的初衷是, 在程式中出現錯誤時, 由程式自己處理錯誤, 儘量不要以exit(0)這種粗暴的方式中止程式.
作者:: ★(attilax)>>> 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍, EMAIL:[email protected]
轉載請註明來源: http://www.cnblogs.com/attilax/
3. 正常流程和異常流程的分離。
另外,(蕭筱雨)同志說:C()拋出的異常,應該在B()中處理,即使不好處理,也要轉化成B()的異常拋出。
既然如此,那請問這種處理方法與用返回值逐層返回相比,有什麼優點?
優點我已經說了,那就是正常流程和異常流程的分離。
4. “是藥三分毒”, 任何事物有缺點,異常也是
藥可治病,也可致病,說的就是事物矛盾的兩重性
。因為藥有毒而否認藥的價值從而不用它,這達不到治病的目的。矛盾的兩重性還告訴我們,對事物進行完全肯定或者否定通常是不正確的,因為還存在著一個科學運用的問題
事物的存在都有其存在的道理,任何事物都是矛盾的統一體,C++中的異常處理也不例外。
由於人們的立場或者視野不同,對於同一事物的看法往往不會是完全相同的,有時甚至會完全相反。由此,就會產生爭論
5. 共存取長補短,協同使用
“是藥三分毒”,藥可治病,也可致病,說的就是事物矛盾的兩重性。因為藥有毒而否認藥的價值從而不用它,這達不到治病的目的。矛盾的兩重性還告訴我們,對事物進行完全肯定或者否定通常是不正確的,因為還存在著一個科學運用的問題
其實C++中的異常處理只是另一種形式的錯誤處理方式,和傳統的錯誤處理方式並不排斥,他們是一種“共存”的關係。只是因為在某些方面或者某些時候,使用異常處理方式比傳統的錯誤處理方式更具優越性,所以異常處理才有了使用的必要,它的存在也才是合理的。
才不會因噎而廢食,因為異常處理存在著使用的局限性就否認其價值,才能知道什麼情況下使用異常處理比較合適,什麼情況下使用異常處理方式和傳統錯誤方式都可以,而什麼情況下最好不要使用異常處理,等等。
最後的建議就是:明智地使用異常處理。
6. 冗長cde
orm.callbackFun=function(data)
{
try{
processJavaEx_V2q315(data);
}catch(e)
{
if(catchEx(e,"com.attilax.user.NotLoginEx"))
{
logx("not login");
//window.location=;
return;
//
}
}
var json=str2json(data);
var obj=json[0];
var fm=new AForm()
fm.bind(obj);
};
7. Solu:事件化處理
8. ref
改進異常處理的6條建議 - Dancen的專欄 - 博客頻道 - CSDN.NET.html