程序運行過程當中,有些錯誤是不可避免的,而如何使程序在出現錯誤時代碼仍然正常工做就成了程序員的平常工做之一。那麼處理錯誤和代碼整潔有什麼關係呢?程序員
前面咱們提到過,try-catch代碼塊會破壞代碼的結構。可是,咱們在處理錯誤時又不得不使用try-catch代碼塊,這樣才能讓咱們的程序保持健壯。那麼如何兼顧整潔和健壯呢,這就是咱們今天要討論的內容。微信
不要使用返回碼編輯器
在上古時期,不少語言還都不支持異常,程序員們只能約定好返回的錯誤碼,經過不一樣的錯誤碼對代碼進行錯誤處理。這麼作須要調用者在調用方法後立刻判斷返回值來決定是否須要處理錯誤。而這一步驟每每被遺忘,就會致使程序出現不可預估的問題。因此,如今咱們有了throw和try-catch這樣的「熱武器」,就不要再用錯誤碼這樣的「冷兵器」了。否則很容易就會被別人給秒殺的。函數
try-catch-finally相信你們都很熟悉,不熟悉的話,能夠前往與本公號達成合做的各大搜索引擎進行搜索,保證有答案。flex
異常拋出的層級搜索引擎
咱們不但願程序中充滿了try-catch代碼塊,這樣會使程序的可讀性變差。所以,咱們要適當的使用throw語句,將異常拋出。交給上一層去處理。可是,若是隻由最頂層的代碼去處理異常,整個程序看上去是會整潔一些,但當咱們須要修改某個底層代碼拋出的異常時會發生什麼呢?咱們須要找到往上拋的每個方法去修改它的簽名,拋出新的異常,並從新發布。這會使咱們的工做量增長好幾倍。因此,咱們的異常最好在本層進行統一處理,或者在拋出後的上一層就進行處理。spa
說明發生異常的環境.net
在Java中,系統異常一般會給出調用棧,便於咱們進行問題的定位和調試。對於咱們本身拋出的異常,也應該給出異常發生的環境,例如列出調用棧,給出請求參數等等。3d
遠離null值指針
咱們在讀、寫代碼時,必定有被好多層的空指針判斷折磨的經歷。一不當心漏掉一個判斷,那麼程序就會出現空指針異常,這個異常要麼被上層的catch捕獲,要麼直接拋出。很明顯,這兩種結果都不是咱們想要的。怎麼遠離空指針異常呢?
首先,代碼的返回值不要返回null。能夠選擇直接拋出一個異常,或者返回一個特定的值,好比空對象等。
其次,代碼調用時,參數不要傳null,由於一旦傳null,那麼在方法體中就須要對這個參數進行非空判斷。而目前尚未什麼好的方法能夠簡單高效的處理參數外部傳來的null,只能使用if判斷。所以但願你們在調用別的方法時儘可能不要傳入null。
小結
本文的主要目的是使咱們的代碼兼顧整潔性和健壯性。這就須要咱們將錯誤處理獨立於主邏輯以外,使錯誤就能夠被單獨處理,不但可以加強可讀性,還能加強可維護性。最後獲得的就是咱們但願看到的整潔而健壯的代碼。若是以爲文章不錯的話,歡迎幫忙點贊或轉發。
本文分享自微信公衆號 - 代碼潔癖患者(Jackeyzhe2018)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。