前言
關于代碼命名,我相信是經常困擾很多小伙伴的一個問題充岛,尤其是對于強迫癥晚期患者保檐。怎么說呢,每次小編在寫代碼之前裸准,總會在想啊想啊展东,用什么命名法好呢?對于經常在C++炒俱、Java盐肃、Python等主流語言上切換的強迫癥來說,換個語言換種命名風格簡直不要太混亂权悟。
今天就來梳理一下常見的代碼命名規(guī)范以及適用范圍吧砸王。
常見命名規(guī)范
為什么需要命名規(guī)范呢?世界級軟件大師 Martin Fowler 大神都說過 CS 領域有兩大最難的事情峦阁,一是緩存失效谦铃,一是程序命名。
《Clean Code》這本書明確指出:
代碼的注釋不是越詳細越好榔昔。實際上好的代碼本身就是注釋驹闰,我們要盡量規(guī)范和美化自己的代碼來減少不必要的注釋瘪菌。若編程語言足夠有表達力,就不需要注釋嘹朗,盡量通過代碼來闡述师妙。
要想讓你的編程語言足夠有表達力,良好的命名規(guī)范是必不可少的屹培。同時默穴,花幾分鐘學學規(guī)范的命名,也能讓你的代碼看起來賞心悅目褪秀,何樂而不為呢蓄诽。
1. 駝峰命名法(CamelCase)
駱駝式命名法(Camel-Case)又稱駝峰式命名法,是電腦程式編寫時的一套命名規(guī)則(慣例)媒吗。正如它的名稱CamelCase所表示的那樣仑氛,是指混合使用大小寫字母來構成變量和函數(shù)的名字。程序員們?yōu)榱俗约旱拇a能更容易的在同行之間交流蝴猪,所以多采取統(tǒng)一的可讀性比較好的命名方式调衰。
它又可以分為以下幾種膊爪。
(1) 小駝峰命名法(lowerCamelCase)
除第一個單詞之外自阱,其他單詞首字母大寫。方法名米酬、參數(shù)名沛豌、成員變量、局部變量需要使用小駝峰命名法(lowerCamelCase)赃额。比如:
getUserInfo()
createCustomThreadPool()
findAllByUserName(String userName)
TaskRepository taskRepository;
(2) 大駝峰命名法(CamelCase)
相比小駝峰法加派,大駝峰法(即帕斯卡命名法)把第一個單詞的首字母也大寫了。常用于類名跳芳,命名空間等芍锦。如:
class TaskDateToSend{}
class TaskLabelToSend{}
SettingRepository
2. 蛇形命名法(snake_case)
蛇形法是全由小寫字母和下劃線組成,在兩個單詞之間用下滑線連接即可飞盆。測試方法名娄琉、常量、枚舉名稱需要使用蛇形命名法(snake_case)吓歇。如:
first_name
last_name
MAX_ITERATION
LAST_DATA
3. 串式命名法(kebab-case)
在串式命名法中孽水,各個單詞之間通過下劃線“-”連接,比如:
hello-world
first-project
建議項目文件夾名稱使用串式命名法(kebab-case)城看,比如 dubbo 項目的各個模塊的命名是下面這樣的:
總結一下
語言場景
給出各個場景下的命名規(guī)則女气,大家要養(yǎng)成習慣。事實上测柠,如果經常在各個語言上切換的話炼鞠,真的可能搞混缘滥。所以今天就Mark一下吧。
Java命名規(guī)范
總體命名規(guī)范
- 類名需要使用大駝峰命名法(UpperCamelCase)風格谒主。
- 方法名完域、參數(shù)名、成員變量瘩将、局部變量需要使用小駝峰命名法(lowerCamelCase)吟税。
- 測試方法名、常量姿现、枚舉名稱需要使用蛇形命名法(snake_case) 肠仪,比如test_get_user()、TIME_LIMIT备典。并且异旧,測試方法名稱要求全部小寫,常量以及枚舉名稱需要全部大寫提佣。
- 項目文件夾名稱使用串式命名法(kebab-case)吮蛹,比如dubbo-registry。
- 包名統(tǒng)一使用小寫拌屏,盡量使用單個名詞作為包名潮针,各個單詞通過 "." 分隔符連接,并且各個單詞必須為單數(shù)倚喂。
- 抽象類命名使用 Abstract 開頭每篷。如:public abstract class AbstractClient extends AbstractEndpoint{}。
- 異常類命名使用 Exception 結尾端圈。如:public class NoSuchMethodException extends RuntimeException{}焦读。
- 測試類命名以它要測試的類的名稱開始,以 Test 結尾舱权。如:public class AnnotationUtilsTest{}矗晃。
包名命名規(guī)范
Java的包名由小寫單詞組成,包的路徑符合所開發(fā)的系統(tǒng)模塊的定義宴倍,以便通過包名可得知其屬于哪個模塊张症,從而方便到對應包里找相應的實現(xiàn)類。
1. 常規(guī)包名
為了保障每個Java Package命名的唯一性,在Java編程規(guī)范中要求開發(fā)人員在自己定義的包名前加上唯一的前綴.由于互聯(lián)網上的域名稱是不會重復的,所以多數(shù)開發(fā)人員采用自己公司在互聯(lián)網上的域名稱作為自己程序包的唯一前綴.例如 : com.sun.swt...
- 公司項目
com : 公司項目,copyright由項目發(fā)起的公司所有.
包名 : com.公司名.項目名.模塊名.. - 團隊項目
team : 團隊項目,指由團隊發(fā)起,并由該團隊開發(fā)的項目,copyright屬于該團隊所有.
包名 : team.團隊名.項目名.模塊名..
2. 自定義包名
一般公司命名為com.公司名.項目名.模塊名....那我們個人的項目又怎么命名呢?個人的英語單詞有individual啊楚、personal吠冤、private、one-man,進一步對以上四個單詞詞意進行分析并在保證了唯一性,繼而使用每個單詞的前4個字母作為前綴,與com也做了區(qū)分.示例如下所示:
- indi : 個體項目,指個人發(fā)起,但非自己獨自完成的項目,可公開或私有項目,copyright主要屬于發(fā)起者. 包名 :indi.發(fā)起者名.項目名.模塊名..
- pers : 個人項目,指個人發(fā)起,獨自完成,可分享的項目,copyright主要屬于個人.包名 : pers.個人名.項目名.模塊名..
- priv : 私有項目,指個人發(fā)起,獨自完成,非公開的私人使用的項目,copyright屬于個人.包名 : priv.個人名.項目名.模塊名..
- onem : 與indi相同恭理,推薦使用indi.
Python命名規(guī)范
類:總是使用首字母大寫單詞串拯辙。如MyClass、ClassName。內部類可以使用額外的前導下劃線涯保。
函數(shù)和方法:小寫+下劃線诉濒,如method_name。
函數(shù)參數(shù):小寫+下劃線夕春,如function_parameter_name未荒。如果一個函數(shù)的參數(shù)名稱和保留的關鍵字沖突,通常使用一個后綴下劃線及志,如random_片排。
全局變量:對于from M import *導入語句,如果想阻止導入模塊內的全局變量可以使用舊有的規(guī)范,在全局變量上加一個前導的下劃線,如_var_name亥贸。應避免使用全局變量民镜。
變量:小寫登夫,由下劃線連接各個單詞。如color、this_is_a_variable。
注意:
- 不論是類成員變量還是全局變量捅僵,均不使用 m 或 g 前綴。
- 私有類成員使用單一下劃線前綴標識眨层。
- 變量名不應帶有類型信息庙楚,因為Python是動態(tài)類型語言。如 iValue谐岁、names_list醋奠、dict_obj 等都是不好的命名。
常量:常量名所有字母大寫伊佃,由下劃線連接各個單詞如MAX_OVERFLOW,TOTAL沛善。
異常:以“Error”作為后綴航揉。
文件名:全小寫,可使用下劃線
包:應該是簡短的、小寫的名字金刁。如果下劃線可以改善可讀性可以加入帅涂,如mypackage。
模塊:與包的規(guī)范同尤蛮,如mymodule媳友。
縮寫:命名應當盡量使用全拼寫的單詞,縮寫的情況有如下兩種:
- 常用的縮寫产捞,如XML醇锚、ID等,在命名時也應只大寫首字母,如XmlParser焊唬。
- 命名中含有長單詞恋昼,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式赶促。
例如:
function 縮寫為 fn
text 縮寫為 txt
object 縮寫為 obj
count 縮寫為 cnt
number 縮寫為 num液肌,等。
前導后綴下劃線:
一個前導下劃線:表示非公有鸥滨。
一個后綴下劃線:避免關鍵字沖突嗦哆。
兩個前導下劃線:當命名一個類屬性引起名稱沖突時使用。
兩個前導和后綴下劃線:“魔”(有特殊用圖)對象或者屬性婿滓,例如init或者file吝秕。絕對不要創(chuàng)造這樣的名字,而只是使用它們空幻。
注意:關于下劃線的使用存在一些爭議烁峭。
特定命名方式:主要是指 xxx 形式的系統(tǒng)保留字命名法。項目中也可以使用這種命名秕铛,它的意義在于這種形式的變量是只讀的约郁,這種形式的類成員函數(shù)盡量不要重載。如
class Base(object):
def init(self, id, parent = None):
self.id = id
self.parent = parent
def message(self, msgid):
其中 id但两、parent 和 message 都采用了系統(tǒng)保留字命名法鬓梅。
Python推薦使用蛇形命名法,因為 Python 是蟒蛇啊谨湘,理所當然是用蛇形命名……
綜合各方面考慮绽快,駝峰式命名法比較好,優(yōu)勢明顯紧阔,事實上坊罢,目前使用駝峰式命名法的人也真的越來越多了。