閱讀材料二:代碼復(fù)審>不要重復(fù)你自己

不要重復(fù)你自己

原文地址:https://courses.edx.org/courses/course-v1:MITx+6.005.1x+3T2016/courseware/Readings_Videos/02-Code-Review/

代碼復(fù)審

代碼復(fù)審是不是代碼原作者的人仔細(xì),系統(tǒng)地學(xué)習(xí)源代碼的過(guò)程.這和校正學(xué)術(shù)論文很類似.

代碼復(fù)審實(shí)際上有兩個(gè)目的:

- 提高代碼質(zhì)量.發(fā)現(xiàn)bug,預(yù)測(cè)可能的bug,檢查代碼的簡(jiǎn)潔性,和檢查與項(xiàng)目風(fēng)格標(biāo)準(zhǔn)的一致性.

- 提升程序員.代碼復(fù)審是程序員學(xué)習(xí)和教別人的一個(gè)重要的方式,關(guān)于新的語(yǔ)言特性,項(xiàng)目設(shè)計(jì)或者其代碼標(biāo)準(zhǔn)的改變,和新科技.特定地在開(kāi)源項(xiàng)目中交流發(fā)生在代碼復(fù)審中.

代碼復(fù)審在開(kāi)源項(xiàng)目如Apache和Mozilla中被廣泛運(yùn)用.代碼復(fù)審在業(yè)界也普遍被采用.在谷歌,你甚至不能提交任何代碼到主目錄除非其他程序員已經(jīng)在代碼復(fù)審中贊同了.

風(fēng)格標(biāo)準(zhǔn)

大部分公司和大型項(xiàng)目有代碼風(fēng)格標(biāo)準(zhǔn)(例如,谷歌Java風(fēng)格).這些可以非常細(xì)化,甚至細(xì)化空格的點(diǎn)(如何縮進(jìn))和中括號(hào)和圓括號(hào)寫(xiě)在哪里.這類問(wèn)題經(jīng)常引向圣戰(zhàn)因?yàn)樗麄冏罱K會(huì)形成一種風(fēng)格和品位.

在6.005,我們這類的官方風(fēng)格指南.我們不會(huì)告訴你哪里放你的括號(hào).這是每個(gè)程序員應(yīng)該做的個(gè)人決策.自我一致性很重要,然后跟隨你項(xiàng)目的的傳統(tǒng)也是非常重要的.如果你是一個(gè)把每個(gè)模塊都重新整理以符合自己的代碼風(fēng)格的程序員,你的隊(duì)友會(huì)恨你的,這樣做就對(duì)了.成為一個(gè)團(tuán)隊(duì)型選手.

但是這里有些規(guī)則非常有意義,同時(shí)目標(biāo)是我們的三大特性,以一種比放括號(hào)更強(qiáng)大的方式.剩下的閱讀材料談到了這些規(guī)則,至少是和本門(mén)課程的關(guān)鍵點(diǎn)相關(guān)的規(guī)則,這里我們普遍談到的是寫(xiě)基本的Java.這是我們將要在閱讀材料中談到的規(guī)則的總結(jié):

- 不要重復(fù)你自己.

- 在需要處注釋.

- 快速失敗.

- 避免魔法數(shù)字.

- 每個(gè)變量只有一個(gè)目標(biāo).

- 用好的命名.

- 避免全局變量.

- 放回值而不是打印它們.

- 為了可讀性用空格.

這些是你在復(fù)審別人的代碼時(shí)應(yīng)該開(kāi)始注意的和你在寫(xiě)自己的代碼時(shí)應(yīng)該要注意提高的.然而別把它當(dāng)做代碼風(fēng)格指南的詳盡列表.這學(xué)期的課程后面,我們將談到更多的事情--說(shuō)明,抽象數(shù)據(jù)類型和重現(xiàn)不變性,并發(fā)性以及線程安全--這些將成為代碼復(fù)審的素材.

嗅覺(jué)例子#1

程序員經(jīng)常將糟糕的需要移除的代碼描述成一種糟糕的氣味.代碼衛(wèi)生是另一種描述方法.讓我們開(kāi)始聞一聞代碼.


代碼1

在下面的一些片段和練習(xí)中我們將挑出這段代碼的特殊氣味.

不要重復(fù)你自己

重復(fù)的代碼對(duì)于安全性是一種風(fēng)險(xiǎn).如果你有一個(gè)完全相同或者非常類似的代碼在兩個(gè)地方,接下來(lái)潛在的風(fēng)險(xiǎn)是這兩處地方都存在一個(gè)bug,結(jié)果維護(hù)者在一處發(fā)現(xiàn)了bug卻沒(méi)有在另一處發(fā)現(xiàn).

避免副本就像你避免過(guò)馬路不注意觀察.復(fù)制粘貼是一種非常臨時(shí)的編程工具,而且你應(yīng)該在你每次用它時(shí)體會(huì)到到撞到你脊柱般危險(xiǎn)的顫抖.你復(fù)制粘貼的代碼越長(zhǎng),風(fēng)險(xiǎn)越大.

不要重復(fù)你自己,DRY是其縮寫(xiě),已經(jīng)成了程序員的咒語(yǔ).

這個(gè)dayOfYear的例子是一個(gè)充滿了同一性的代碼.你如何做到Dry呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容