這幾期想和大家分享下我自己在開發(fā)時的一些經(jīng)驗描焰,這次來說說關(guān)于代碼規(guī)范母赵。
什么是代碼規(guī)范
我理解的代碼規(guī)范,是一個標準悠砚,讓寫代碼的人按照這個標準來開發(fā)。
例如php的psr1(https://www.php-fig.org/psr/psr-1/)和psr2(https://www.php-fig.org/psr/psr-2/)
為什么需要代碼規(guī)范
萬事萬物必然有其存在的意義堂飞,這里說下我的理解:
- 這里先說明很重要的一點灌旧,那就是代碼是寫給人看的,并不是機器酝静,所以說代碼要讓別人好理解节榜。
- 我們多數(shù)情況下都是團隊開發(fā),所以大家都約定好一個標準别智,更加有利于團隊代碼的可維護性。
- 團隊中有老人離職稼稿、有新人加入薄榛,從代碼規(guī)范中是可以看到這個團隊的文化的傳承的讳窟。
- 對自己也是個約束,不要太隨意了敞恋。
如何制定規(guī)范
制定步驟:
- 首先看是否有官方規(guī)范丽啡。一些較新的編程語言通常會有自己的一些規(guī)范,例如Golang硬猫,大家可以參考官方的Effective Go(https://golang.org/doc/effective_go.html)补箍,建議遵守。
- 其次看是否有權(quán)威的啸蜜、認同度高的規(guī)范。通常使用較廣泛的語言會這樣做,如php的psr1抓督、2膳犹,建議遵守。
- 之后蜂林,才是我們團隊來制定自己的規(guī)范遥诉。
團隊規(guī)范注意:
- 盡量避免一言堂。因為是團隊規(guī)范噪叙,所以是需要得到大家的認同的矮锈。
- 要經(jīng)常反思,不好的地方和團隊成員討論不斷調(diào)整睁蕾。其實這也是要求團隊成員開發(fā)時不斷反思的一個過程愕难。
- 規(guī)范簡單易懂。
參與過的規(guī)范實例
這里舉兩個自己參與過的實例:
Golang項目
我們團隊第一次使用Golang開發(fā)項目時惫霸,當時制定了這樣的一套規(guī)范:
- 變量
- 多個詞之間用"_"(下劃線)連接猫缭,如:prj_home
- 可導(dǎo)出全局變量每個詞的首字母均大寫,如:Prj_Home
- 包內(nèi)部全局變量用“_”(下劃線)開頭壹店,單詞小寫猜丹,如:_prj_home
- 函數(shù)
- 函數(shù)名稱駝峰式,如:listPrj
- 類型
- 類型名用“t”開頭硅卢,如:t_prj_item
- 可導(dǎo)出名稱用“T”射窒,如:T_Prj_Item
- 接口類型用“i”開頭,如:i_logger
- 可導(dǎo)出接口類型用“I”将塑,如:I_Logger
- 多名詞規(guī)則同“變量命名規(guī)則”
當時制定這套規(guī)范時脉顿,我們對Golang的使用還是剛剛起步,很多不理解的地方点寥,所以這套規(guī)范現(xiàn)在看來艾疟,很多地方都不合適,但在當時,還是起到了很大的作用蔽莱。
- 這套規(guī)范幫助我們這些初學(xué)者在當時統(tǒng)一了風(fēng)格弟疆,避免了混淆。
- 后續(xù)的同學(xué)也能很快理解當時的項目盗冷,所以項目雖早怠苔,但現(xiàn)在也很好的運行著。
- 隨著Go越用越多仪糖,我們不斷更新我們的規(guī)范柑司,從命名上,項目的組織上锅劝,都一直經(jīng)歷著變化攒驰,目前最新可參考gobox項目代碼(https://github.com/orgs/goinbox/dashboard)
PHP項目
這個項目也是我們團隊的一個編碼規(guī)范的典型運用,規(guī)范如下:
- 綜述
對于psr標準中已規(guī)定的部分鸠天,請遵照執(zhí)行讼育,這里不再贅述。
這里主要定義現(xiàn)有psr標準中未規(guī)范的部分稠集。
- 變量
統(tǒng)一使用駝峰式
- 數(shù)組key
使用下劃線分隔多詞
- 判斷時常量在等號左邊還是右邊
統(tǒng)一放在等號右邊
if ($a === 0){}
- 函數(shù)中參數(shù)如果提供默認值奶段,等號兩端是否有空格
有
function foo($a = 0){}
這個項目的編碼規(guī)范由當時我們團隊的五個人共同制定,我們列出psr中未規(guī)定的部分剥纷,每個人陳述自己的觀點痹籍,然后舉手表決。
結(jié)束語
規(guī)范不是目的晦鞋,只是一種手段蹲缠,好的規(guī)范十分有助于編程人員培養(yǎng)良好的編程習(xí)慣。
最后悠垛,請記住一點:代碼是寫給人看的线定,機器只需要0和1。