許久以后,你會(huì)感謝自己寫的異常處理代碼
高端IT就業(yè)培訓(xùn)專家-15年口碑積累,20萬(wàn)名研發(fā)工程師從這里走出
很多時(shí)候,我們因?yàn)殛P(guān)注最終的結(jié)果,而總是忽略其它的情況。所以我們寫的代碼并不是那么的健壯。這篇文章屬于程序員內(nèi)功修煉,值得一看。寫代碼的時(shí)候,有幾個(gè)階段可以參考一下(魚鷹經(jīng)歷并總結(jié)):
階段一
只要最終的結(jié)果
處于這個(gè)階段的一般都是初學(xué)者,眼里只有一個(gè)目標(biāo),那就是程序運(yùn)行成功,從不考慮其他因素。比如一個(gè)簡(jiǎn)單的 SPI 驅(qū)動(dòng)程序,最終的目標(biāo)只要一個(gè),通信成功。所以當(dāng)需要延時(shí)時(shí)就會(huì)采用死等方式等待結(jié)果,而不會(huì)考慮其他可能出現(xiàn)的結(jié)果,比如因?yàn)槟撤N原因?qū)е乱_電平被持續(xù)一個(gè)電平不變,導(dǎo)致死循環(huán);比如因?yàn)槟愕难訒r(shí),導(dǎo)致其他人功能無(wú)法及時(shí)處理。這個(gè)時(shí)候的思考總是過(guò)于理想化,不是因?yàn)樽约禾硐?,太?lè)觀,而是因?yàn)闆](méi)有足夠的經(jīng)歷告訴你,這樣寫是有問(wèn)題的。因?yàn)闆](méi)有經(jīng)歷過(guò),所以初學(xué)者也就考慮不了那么多,所以你看初學(xué)者的代碼會(huì)很簡(jiǎn)單,是一條直線,邏輯很清晰,沒(méi)有岔路。
階段二
做一些常見(jiàn)的異常處理
隨著經(jīng)歷越多(不管是網(wǎng)上看到的還是自己經(jīng)歷的),漸漸地,自己的代碼變得多了一些,功能還是那個(gè)功能,只是這時(shí)候的你考慮的更多,更全面,你漸漸的增加了各種異常處理。比如你不再使用死等方式延時(shí),而是增加了一個(gè)等待時(shí)間的超時(shí)處理;又比如你寫的程序不再只有if里面的內(nèi)容(條件為真),還有else(條件為假)。這個(gè)時(shí)候的你眼里不再只有最終的結(jié)果,還有在運(yùn)行過(guò)程中可能出現(xiàn)的其他情況,并且會(huì)對(duì)這些情況做處理。
階段三
懷疑一切
這個(gè)階段的你不再相信任何東西了,即使它是那么的可靠。你總是在函數(shù)開(kāi)始處檢查傳入的參數(shù)(如果有的話),判斷指針是否為空,判斷數(shù)據(jù)是否在需要的范圍內(nèi),等等。總是在使用指針、數(shù)組的時(shí)候小心翼翼,深怕一不小心就越界了,而這種BUG只有經(jīng)歷的人才懂到底有多難查。總是在異常的地方做出一些動(dòng)作,如返回錯(cuò)誤代號(hào)、如打印錯(cuò)誤消息等。不管怎樣,在出現(xiàn)問(wèn)題后,你總是能夠快速的定位問(wèn)題,而這,得益于你對(duì)異常的處理。
階段四
做好善后工作
階段三可能讓你很快的定位問(wèn)題,但是一旦出現(xiàn)問(wèn)題,程序還是無(wú)法正常執(zhí)行下去,比如申請(qǐng)的資源(內(nèi)存、信號(hào)量等)沒(méi)釋放,又比如關(guān)閉的中斷在異常后未重新打開(kāi)等等。所以異常處理代碼除了能很快定位BUG外,還要做好善后處理,這樣才能讓程序健壯的一直運(yùn)行下去。
魚鷹曾在《代碼寫完了,你要花多少時(shí)間測(cè)試?》一文中介紹了一些調(diào)試方法,今天,繼續(xù)更深入的探討。
END
免責(zé)聲明:整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有
如有侵權(quán),請(qǐng)聯(lián)系刪除
專業(yè)始于專注
卓識(shí)始于遠(yuǎn)見(jiàn)
# 往期干貨 #
點(diǎn)擊下方圖片即刻前往
瞅一瞅看一看 ↘
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!





