變量名字,怎么命名更好?
一、話題背景
在軟件開發(fā)領(lǐng)域,代碼的可讀性是一個(gè)不容忽視的問題。一個(gè)常見的挑戰(zhàn)是變量命名的規(guī)范性。不規(guī)范的定義和隨意的命名習(xí)慣常常使得研發(fā)人員難以理解變量的具體含義及其用途。
那當(dāng)研發(fā)人員沒有寫注釋時(shí),這就要求在寫變量名稱的時(shí)候,需要讓其他研發(fā)同學(xué)看得懂這是什么意思,它的用途是什么。如果看不懂的情況下,亂猜的場(chǎng)景下,就可能導(dǎo)致傳錯(cuò)參數(shù),出現(xiàn)bug。
那么就有同事提出了這幾種變量命名選項(xiàng):
- 方式一:英文直譯,直觀,但是一旦遇到復(fù)雜的定義時(shí),命名的名稱就可能很長了。
- 方式二:一定程度的縮寫,大概率能猜測(cè)出來,感覺不怎么好看。
- 方式三:完整縮寫,如果不寫注解,完全看不出意思;大部分代碼都不寫注解的。
所以面對(duì)這些命名選項(xiàng),大家認(rèn)為哪種方式更為合適,或者是否有其他更好的命名方式呢?
二、鵝廠工程師的看法
1.
miey-S1安全規(guī)劃中心應(yīng)用研究員
駱駝命名法挺好使的,混合使用 拼音/英文單詞/單詞縮寫 構(gòu)成變量和函數(shù)的名字。StudentNum、student_num,如果不是 num、cnt、idx、len、avg、obj、pkg、func、info 等等耳聞能詳?shù)目s寫,就沒必要強(qiáng)行縮寫了
另外,這個(gè)方式三....真的有被笑到
2.
lakhdar-TEG應(yīng)用開發(fā)工程師
studentNum,太長的話用縮寫+注釋。
3.
chuan-CDG應(yīng)用開發(fā)工程師
num 和 number 是一個(gè)有二義性的詞匯,不要使用。 它既可以表示總數(shù),也可以表示序號(hào)。
有人會(huì)認(rèn)為 studentNumber 天然是學(xué)生數(shù)量的意思,但是通常 idNumber 就不是id數(shù)量的意思,而是身份證號(hào)。
那么 carNumber是汽車數(shù)量的意思,還是汽車號(hào)碼的意思呢?這就讓代碼復(fù)雜化了。
studentCount 是一個(gè)一般好的名字,studentCnt是一個(gè)更好的名字。
All you need is Code Complete(《代碼大全》)
4.
krisjc-TEG運(yùn)營開發(fā)工程師
studentCount。
我個(gè)人覺得變量名不怕你起得長,就怕你起得短。不然后來人看你的代碼一臉懵,可讀性才是第一位的。
“我們要規(guī)避過于罕見或者根本不常用的單詞,甚至是自己創(chuàng)造的詞語,那更是禁忌,畢竟代碼是給人讀的,而不是什么過于抽象的藝術(shù)作品。”
5.
kernbin-WXG客戶端開發(fā)工程師
視情況而定吧,如果上下文給足了信息,比如這是一個(gè)局部變量,在一個(gè)很短的名為 CountNumberOfStudent 的小函數(shù)里,那么我覺得可以短一些,二或者三都可以,因?yàn)樾畔⒆銐蛄恕?/p>
如果這是個(gè)全局變量(先不談全局變量是否要加 g_ 之類的前綴)或者某個(gè)很復(fù)雜很大的函數(shù)里,那么我覺得名字應(yīng)該足夠長足夠完整。因?yàn)樵谶@個(gè)變量用到的上下文中信息不一定充足。
6.
n-TEG后臺(tái)開發(fā)工程師
除非是業(yè)界習(xí)俗或公認(rèn),一個(gè)單詞截一部分的應(yīng)該排斥。
以下是幾個(gè)壞例子:
- stNum
- stuNum
- studNum
- studeNum
- studenNum
7.
langdon-IEG運(yùn)營開發(fā)工程師
變量名長度和作用域正相關(guān)。可以參考《代碼整潔之道》clean code。
另外, IDE+AI時(shí)代,似乎沒有必要用numStuds這種不節(jié)約幾個(gè)字母,還容易造成歧義的縮寫,除非stud的寫法取得局部共識(shí)。
8.
kairee-IEG UI開發(fā)工程師
studentCount, studentNumber。
為什么要在意變量名稱長?難道是用紙和筆寫代碼嗎?
9.
kael-TEG運(yùn)營開發(fā)工程師
變量取名實(shí)際上服務(wù)于代碼閱讀人。這個(gè)代碼閱讀人可以是你是你的團(tuán)隊(duì),也可以是只有你自己。
通常來說,為了保障團(tuán)隊(duì)的閱讀,應(yīng)使用描述足夠準(zhǔn)確和無歧義的名字。
如果存在某段代碼,后續(xù)永遠(yuǎn)不用修改和維護(hù),或者只用運(yùn)行一次,那么名稱的長短就不那么重要了。例如臨時(shí)編寫的腳本,用完就刪的那種。
還有一種極端的情形,在類似ACM的競(jìng)賽中,通常就會(huì)把名字取成和題目描述中一致,包括x,y,z,n,m,q,p這種。一方面是能夠在爭(zhēng)分奪秒的比賽中快速打碼,另一方面是與原題中變量語義保持一致,減少反復(fù)讀題的變量轉(zhuǎn)換理解的開銷,本身也可以增加閱讀效率。