优秀的开发者从命名开始
有人說(shuō),命名能力也能體現(xiàn)一個(gè)程序員的基本編程素養(yǎng)。我很贊成這句話(huà)!作為開(kāi)發(fā)人員逃不過(guò)起名字這一關(guān)的,大到項(xiàng)目名、模塊名,小到類(lèi)名、方法名、參數(shù)名、參數(shù)名、變量名。而命名又對(duì)代碼的質(zhì)量和可讀性起到很關(guān)鍵的決定。
如何碼出高質(zhì)量的代碼呢?其實(shí)命名也沒(méi)有那么難,關(guān)鍵看你重不重視,愿不愿意花時(shí)間。以下是課程筆記和阿里巴巴的開(kāi)發(fā)手冊(cè)中覺(jué)得適用的部分,分享出來(lái)。
課程筆記
命名多長(zhǎng)最合適?
命名的一個(gè)原則能夠準(zhǔn)確的表達(dá)其含義即可。命名可以長(zhǎng)點(diǎn)也沒(méi)關(guān)系。
命名要可讀、可搜索
這里說(shuō)的可讀,指的是不用用一些特別生僻的英文單詞來(lái)命名。可搜索是利用開(kāi)發(fā)工具的智能聯(lián)想功能。比如鍵入獲取某個(gè)對(duì)象“.Get”,IDE就會(huì)返回所有以Get開(kāi)頭的方法等等。例如:
獲取單個(gè)對(duì)象的方法用Get做前綴
獲取多個(gè)對(duì)象的方法用GetList做前綴
獲取多個(gè)對(duì)象的方法用Getcount做前綴
插入的方法用 save/insert 做前綴
刪除的方法用 remove/delete 做前綴
修改的方法用 update 做前綴
函數(shù)多大才合適?
一個(gè)函數(shù)幾百行,說(shuō)明了什么?邏輯過(guò)于復(fù)雜、閱讀代碼的時(shí)候,很容易就會(huì)看了后面忘了前面。其實(shí)更能反映一個(gè)程序員的邏輯能力和提煉能力!要本著函數(shù)單一職責(zé)原則,進(jìn)行合理的拆分!具體函數(shù)大小也沒(méi)法量化,網(wǎng)上有一種說(shuō)法,那就是不要超過(guò)一個(gè)顯示屏的垂直高度。大概函數(shù)也是50行左右。
注釋如何寫(xiě)?命名很重要,注釋跟命名同等重要。有人認(rèn)為好的命名完全可以代替注釋。個(gè)人覺(jué)得,這樣的觀點(diǎn)有點(diǎn)太過(guò)極端。命名再好,畢竟有長(zhǎng)度限制,不可能足夠詳盡,這個(gè)時(shí)候,注釋就是一個(gè)很好的補(bǔ)充。注釋的目的是讓代碼更容易看懂。
阿里開(kāi)發(fā)手冊(cè)命名、注釋部分(稍有改動(dòng))
【強(qiáng)制】代碼中的命名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。說(shuō)明:正確的英文拼寫(xiě)和語(yǔ)法可以讓閱讀者易于理解,避免歧義。注意,即使純拼音命名方式也要避免采用。
【強(qiáng)制】類(lèi)名、方法名使用 UpperCamelCase 風(fēng)格,但以下情形例外:DO / BO / DTO / VO / ?UID 等。
【強(qiáng)制】參數(shù)名、成員變量、局部變量都統(tǒng)一使用 lowerCamelCase 風(fēng)格,必須遵從駝峰形式。
【強(qiáng)制】常量命名全部大寫(xiě),單詞間用下劃線(xiàn)隔開(kāi),力求語(yǔ)義表達(dá)完整清楚,不要嫌名字長(zhǎng)。
【強(qiáng)制】抽象類(lèi)命名使用 Abstract 或 Base 開(kāi)頭;異常類(lèi)命名使用 Exception 結(jié)尾;測(cè)試類(lèi)命名以它要測(cè)試的類(lèi)的名稱(chēng)開(kāi)始,以 Test 結(jié)尾。
【強(qiáng)制】杜絕完全不規(guī)范的縮寫(xiě), 避免望文不知義。反例:AbstractClass“縮寫(xiě)” 命名成 AbsClass;condition“縮寫(xiě)” 命名成 condi,此類(lèi)隨 意縮寫(xiě)嚴(yán)重降低了代碼的可閱讀性。
【推薦】如果模塊、 接口、類(lèi)、方法使用了設(shè)計(jì)模式,在命名時(shí)需體現(xiàn)出具體模式。說(shuō)明:將設(shè)計(jì)模式體現(xiàn)在名字中,有利于閱讀者快速理解架構(gòu)設(shè)計(jì)理念。
【參考】枚舉類(lèi)名建議帶上 Enum 后綴,枚舉成員名稱(chēng)需要全大寫(xiě),單詞間用下劃線(xiàn)隔開(kāi)。
說(shuō)明:枚舉其實(shí)就是特殊的類(lèi), 域成員均為常量, 且構(gòu)造方法被默認(rèn)強(qiáng)制是私有。
注釋規(guī)約
【強(qiáng)制】所有的抽象方法(包括接口中的方法)注釋,除了返回值、參數(shù)、 異常說(shuō)明外,還必須指出該方法做什么事情,實(shí)現(xiàn)什么功能。
說(shuō)明:對(duì)子類(lèi)的實(shí)現(xiàn)要求,或者調(diào)用注意事項(xiàng),請(qǐng)一并說(shuō)明。
【強(qiáng)制】所有的類(lèi)都必須添加創(chuàng)建者和創(chuàng)建日期。
【強(qiáng)制】方法內(nèi)部單行注釋,在被注釋語(yǔ)句上方另起一行,使用//注釋。方法內(nèi)部多行注釋使用/* */注釋,注意與代碼對(duì)齊。
【強(qiáng)制】所有的枚舉類(lèi)型字段必須要有注釋,說(shuō)明每個(gè)數(shù)據(jù)項(xiàng)的用途。
【推薦】與其“半吊子”英文來(lái)注釋,不如用中文注釋把問(wèn)題說(shuō)清楚。專(zhuān)有名詞與關(guān)鍵字保持英文原文即可。反例:“TCP 連接超時(shí)”解釋成“傳輸控制協(xié)議連接超時(shí)”,理解反而費(fèi)腦筋。
【推薦】代碼修改的同時(shí),注釋也要進(jìn)行相應(yīng)的修改,尤其是參數(shù)、返回值、異常、核心邏輯等的修改。說(shuō)明:代碼與注釋更新不同步,就像路網(wǎng)與導(dǎo)航軟件更新不同步一樣,如果導(dǎo)航軟件嚴(yán)重滯后,就失去了導(dǎo)航的意義。
【參考】對(duì)于注釋的要求:第一、能夠準(zhǔn)確反應(yīng)設(shè)計(jì)思想和代碼邏輯;第二、能夠描述業(yè)務(wù)含義,使別的程序員能夠迅速了解到代碼背后的信息。完全沒(méi)有注釋的大段代碼對(duì)于閱讀者形同天書(shū),注釋是給自己看的,即使隔很長(zhǎng)時(shí)間,也能清晰理解當(dāng)時(shí)的思路;注釋也是給繼任者看的,使其能夠快速接替自己的工作。
【參考】好的命名、代碼結(jié)構(gòu)是自解釋的,注釋力求精簡(jiǎn)準(zhǔn)確、表達(dá)到位。避免出現(xiàn)注釋的一個(gè)極端:過(guò)多過(guò)濫的注釋,代碼的邏輯一旦修改,修改注釋是相當(dāng)大的負(fù)擔(dān)。
最后,還有一條非常重要的,那就是,項(xiàng)目、團(tuán)隊(duì),甚至公司,一定要制定統(tǒng)一的編碼規(guī)范,并且通過(guò) Code Review 督促執(zhí)行,這對(duì)提高代碼質(zhì)量有立竿見(jiàn)影的效果。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的优秀的开发者从命名开始的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百万年薪程序员的7点能力
- 下一篇: 程序员羽化之路--假如需要一百万个对象