|
英文原文:The conventions we follow
我并不認(rèn)為程序員是一個(gè)情緒特別豐富的群體。但有一些事情卻能很容易刺激程序員的神經(jīng),那就是代碼格式和布局(formatting and layout of code)。如果看到一個(gè)函數(shù)的括弧在同一行上沒(méi)有閉合,我的眼睛會(huì)噴血。如果看到有人沒(méi)有恰好的在兩個(gè)函數(shù)間留一空行,我的小腿會(huì)抽筋。但重點(diǎn)在這里——除非是在家里開(kāi)發(fā)自己的業(yè)余愛(ài)好軟件,我的這些個(gè)人喜好其實(shí)是無(wú)關(guān)緊要的。同樣,作為一個(gè)團(tuán)隊(duì)中的一員,你的個(gè)人編程喜好也應(yīng)該放到一邊。
編碼風(fēng)格(coding style)很容易會(huì)和編碼規(guī)范(coding standard)混為一談,因?yàn)檫@兩個(gè)詞經(jīng)常會(huì)被人換著使用。我認(rèn)為,編碼規(guī)范同時(shí)包括了編碼風(fēng)格和其它規(guī)范,不僅僅指代碼格式。例如,像“返回成功/失敗的函數(shù)應(yīng)該用一個(gè)整數(shù)作為返回值”,這樣的規(guī)則不屬于編碼風(fēng)格。在這篇文章中,編碼風(fēng)格簡(jiǎn)單的指一個(gè)描述如何格式化代碼的說(shuō)明。編碼風(fēng)格中的規(guī)則通常會(huì)涉及到下面這些主題:
- 縮進(jìn)
- 空格的使用
- Tab的使用
- 注釋
- 命名習(xí)慣
- 代碼行長(zhǎng)度
- 語(yǔ)言特點(diǎn)風(fēng)格,例如是否使用可有可無(wú)的分號(hào)。
編碼風(fēng)格都是為特定的編程語(yǔ)言制定的,可以把它們看作“我們共同的約定”。如果在你的公司里,在你在時(shí),在這些事情正在制定完成,你可以提出你的喜好,那你是幸運(yùn)。但通常情況是,一種編碼風(fēng)格在其生命期里看著無(wú)數(shù)的程序員來(lái)了又走了。在我的眼里,遵守編碼風(fēng)格有下面三個(gè)主要好處:
1. 遵守編碼風(fēng)格使代碼更容易維護(hù)
今天由這個(gè)程序員實(shí)現(xiàn)的軟件,明天可能需要另外一個(gè)程序員維護(hù)。如果所有代碼中大家使用同一種編碼風(fēng)格,這另外一個(gè)程序員快速的掃一眼陌生的代碼,就能根據(jù)大家約定的編程習(xí)慣,推斷出代碼的作用。如果編碼風(fēng)格中指明常量應(yīng)該全用大寫字母表示,那么,當(dāng)看到一個(gè)全是大寫字母的變量時(shí),你就能推斷出它是常量。同樣的,如果編碼風(fēng)格中規(guī)定包的引入要有順序,那你立刻就能知道去哪里找這些包。這使得代碼很容易維護(hù)。
2. 編碼風(fēng)格使形成代碼集體所有制
代碼集體所有制意味著全體程序員要負(fù)責(zé)所有代碼。集體所有制的作用很大,它能有效的增大巴士因子——一個(gè)項(xiàng)目能承受多少個(gè)程序員被車撞了而不影響項(xiàng)目的正常進(jìn)行。在整個(gè)代碼庫(kù)中堅(jiān)持延用一種常用的編碼風(fēng)格,所以程序員都能更容易的理解、維護(hù)。
相反,如果在一個(gè)大型的軟件項(xiàng)目中,每個(gè)程序員都使用自己的編碼風(fēng)格,最終會(huì)引起一場(chǎng)維護(hù)版圖的戰(zhàn)爭(zhēng),就像動(dòng)物世界里我們的這些朋友:
氣味記號(hào)(也稱噴灑尿液或領(lǐng)土記號(hào))是動(dòng)物標(biāo)記自己領(lǐng)土范圍的一種行為。通常是通過(guò)留下具有強(qiáng)烈氣味的物質(zhì)來(lái)完成,很多時(shí)候是通過(guò)在領(lǐng)土中突出的物體上小便。- 維基百科
個(gè)人編碼風(fēng)格就像是狗撒尿,留下自己的勢(shì)力記號(hào)。他們?cè)诖a中留下自己的符號(hào),在程序員之間創(chuàng)造壁壘。
3. 編碼風(fēng)格能消除那些長(zhǎng)久的紛爭(zhēng)
每個(gè)程序員都對(duì)編碼風(fēng)格有強(qiáng)烈的自我認(rèn)同。這種感覺(jué)深植于每個(gè)人的自負(fù)中,每當(dāng)和同事遇到是否應(yīng)該在關(guān)鍵詞周圍使用空格時(shí),這種討論很容易升級(jí)而僵持不下。但是,靜下來(lái)想想——這真的無(wú)所謂。不管是不是在關(guān)鍵詞周圍使用了空格,只要能達(dá)成一致,大家都能從中獲得易維護(hù)和集體所有制的好處。在這種情況中,閉著眼睛,遵循一種編碼風(fēng)格就行了。
你不需要喜歡這種編碼風(fēng)格。如果你不喜歡里面的某條規(guī)定,那就罵幾句這個(gè)文檔,只向文檔發(fā)脾氣,就像人類遷怒于上帝。然后還是按照約定做事。這樣做更具有建設(shè)性,比無(wú)休無(wú)止的吵論這些不重要的事情好的多。
有了一套編碼風(fēng)格并不一定會(huì)給你帶來(lái)好處——除非大家都遵守。有些時(shí)候,你并不一定需要手工去調(diào)整代碼。很多的程序編程器,例如Eclipse,能配置幫你格式化代碼,使其符合編碼風(fēng)格。即使你的編輯器沒(méi)有這種功能,很多其它工具也能夠自動(dòng)按照某種風(fēng)格格式化一個(gè)文件。在我們的團(tuán)隊(duì)中,我們使用 indent 和 uncrustify 工具。我還聽(tīng)說(shuō)過(guò)一些其它好東西,比如ReSharper。那些不能被自動(dòng)實(shí)施的規(guī)則,例如命名習(xí)慣,可以在代碼審查的過(guò)程中落實(shí)。
it知識(shí)庫(kù):編碼風(fēng)格不是編碼規(guī)范,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。