10分鐘了解代碼命名規(guī)范(Java初橘、Python)

前言

關于代碼命名,我相信是經常困擾很多小伙伴的一個問題充岛,尤其是對于強迫癥晚期患者保檐。怎么說呢,每次小編在寫代碼之前裸准,總會在想啊想啊展东,用什么命名法好呢?對于經常在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。
注意

  1. 不論是類成員變量還是全局變量捅僵,均不使用 m 或 g 前綴。
  2. 私有類成員使用單一下劃線前綴標識眨层。
  3. 變量名不應帶有類型信息庙楚,因為Python是動態(tài)類型語言。如 iValue谐岁、names_list醋奠、dict_obj 等都是不好的命名。

常量:常量名所有字母大寫伊佃,由下劃線連接各個單詞如MAX_OVERFLOW,TOTAL沛善。

異常:以“Error”作為后綴航揉。

文件名:全小寫,可使用下劃線

:應該是簡短的、小寫的名字金刁。如果下劃線可以改善可讀性可以加入帅涂,如mypackage。

模塊:與包的規(guī)范同尤蛮,如mymodule媳友。

縮寫:命名應當盡量使用全拼寫的單詞,縮寫的情況有如下兩種:

  1. 常用的縮寫产捞,如XML醇锚、ID等,在命名時也應只大寫首字母,如XmlParser焊唬。
  2. 命名中含有長單詞恋昼,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式赶促。
    例如:
    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但两、parentmessage 都采用了系統(tǒng)保留字命名法鬓梅。

Python推薦使用蛇形命名法,因為 Python 是蟒蛇啊谨湘,理所當然是用蛇形命名……

綜合各方面考慮绽快,駝峰式命名法比較好,優(yōu)勢明顯紧阔,事實上坊罢,目前使用駝峰式命名法的人也真的越來越多了。

reference

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乖仇,隨后出現(xiàn)的幾起案子憾儒,更是在濱河造成了極大的恐慌,老刑警劉巖乃沙,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件起趾,死亡現(xiàn)場離奇詭異,居然都是意外死亡警儒,警方通過查閱死者的電腦和手機训裆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缭保,你說我怎么就攤上這事汛闸。” “怎么了艺骂?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵诸老,是天一觀的道長。 經常有香客問我钳恕,道長别伏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任忧额,我火速辦了婚禮厘肮,結果婚禮上,老公的妹妹穿的比我還像新娘睦番。我一直安慰自己类茂,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布托嚣。 她就那樣靜靜地躺著巩检,像睡著了一般。 火紅的嫁衣襯著肌膚如雪示启。 梳的紋絲不亂的頭發(fā)上兢哭,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音夫嗓,去河邊找鬼迟螺。 笑死,一個胖子當著我的面吹牛舍咖,可吹牛的內容都是我干的矩父。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼谎仲,長吁一口氣:“原來是場噩夢啊……” “哼浙垫!你這毒婦竟也來了?” 一聲冷哼從身側響起郑诺,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杉武,沒想到半個月后辙诞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡轻抱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年飞涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡较店,死狀恐怖士八,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情梁呈,我是刑警寧澤婚度,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站官卡,受9級特大地震影響蝗茁,放射性物質發(fā)生泄漏。R本人自食惡果不足惜寻咒,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一哮翘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毛秘,春花似錦饭寺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霞揉,卻和暖如春旬薯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背适秩。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工绊序, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秽荞。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓骤公,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扬跋。 傳聞我的和親對象是個殘疾皇子阶捆,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360