代码整洁之道-11
當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),我們有責(zé)任確保代碼照常工作,所以錯(cuò)誤處理很重要,但如果它搞亂了代碼邏輯,就是錯(cuò)誤的做法。我們既要編寫整潔代碼又要優(yōu)雅的處理錯(cuò)誤需要一些技巧和思路。
1.使用異常而非返回碼
之前許多需要不支持異常,這些語(yǔ)言在處理錯(cuò)誤的手段有限,要么返回一個(gè)錯(cuò)誤標(biāo)識(shí),要么返回給調(diào)用者檢查的錯(cuò)誤碼。這些手段搞亂了調(diào)用者代碼邏輯,且調(diào)用者必須在調(diào)用之后立即檢查錯(cuò)誤,但這個(gè)步驟很容易被遺忘,所以最好拋出一個(gè)異常,這樣調(diào)用代碼整潔,且不會(huì)打亂邏輯。
2.提前寫好try-catch-finally可控異常語(yǔ)句。
Try代碼塊像是事物,catch代碼塊將程序維持在一種持續(xù)狀態(tài)。try-catch結(jié)構(gòu)定義了一個(gè)范圍。
3.錯(cuò)誤信息要充足
我們可以從異常里得到堆棧蹤跡,而堆棧蹤跡卻無(wú)法告訴你該失敗操作的初衷。我們應(yīng)該創(chuàng)建充分的錯(cuò)誤信息和提供足夠的環(huán)境說(shuō)明,失敗操作以及失敗類型,并和異常一起輸出到錯(cuò)誤日志中。
4.將錯(cuò)誤分類
將錯(cuò)誤分類,比如可以分為設(shè)備錯(cuò)誤,網(wǎng)絡(luò)錯(cuò)誤,編程錯(cuò)誤等。
5.打包API
將第三方API打包是個(gè)良好的實(shí)踐手段,降低了對(duì)每個(gè)第三方的依賴,也有助于模擬第三方調(diào)用。
6.定義常規(guī)流程
特例模式(SPECIAL CASE PATTERN,[Fowler]),創(chuàng)建一個(gè)類或配置一個(gè)對(duì)象,用來(lái)處理特例,異常行為被封裝到特例對(duì)象中。
7.別返回null
返回null值,基本是在給自己增加工作量,也是在給調(diào)用者添亂,只要有一處沒(méi)檢查null值,應(yīng)用程序就會(huì)失控。如果你打算在方法中返回null值,不如拋出異常或返回特例對(duì)象。
8.別傳遞null值
將null值傳遞給其他方法更糟糕,除非API要求你向它傳遞null值,否則就要盡可能避免傳遞null值。
總結(jié)