正名者刁憋,辨正名分也滥嘴。
這一篇至耻,我們簡短聊一個很多人不屑于聊的話題若皱,程序中的命名問題。
也就是說尘颓,我們在寫程序的時候走触,一個函數(shù)、變量疤苹、類互广、名空間、文件到底應(yīng)該如何辨正名分卧土。
這個問題看似不值一提惫皱,可在大叔眼里,命名非常重要尤莺,名字好壞有可能決定程序的命運旅敷。
什么!什么缝裁!沒這么嚴(yán)重吧扫皱?
-1- 正名很重要
古人云:“立品為先,字如其人”捷绑。
意思是韩脑,先端正做人,再端正寫字粹污,通過寫字能夠影射出一個人的性格段多、心理、能力壮吩。
寫程序也類似进苍,通過代碼中的命名也能夠看出一個程序員的修養(yǎng)與功底。欲正其名鸭叙,先正其心觉啊,一個連變量名都起不好的程序員,很難寫出漂亮的代碼沈贝。
《論語·子路》篇有“名不正則言不順杠人,言不順則事不成”之說。名分不當(dāng)、名實不符嗡善,說話就不合理辑莫,事情就很難辦成。
程序既然是由編程語言表達(dá)的罩引,名不正也會導(dǎo)致言不順各吨。命名不恰當(dāng),會造成大問題袁铐。如果你無法想出一個合適的名字揭蜒,也許意味著你的設(shè)計有問題,需要加以重視剔桨。
試著想一想忌锯,假如把高級語言程序中的關(guān)鍵字、保留字领炫、邏輯運算符號統(tǒng)統(tǒng)去掉,可不就剩下你那些命名了嗎张咳?這么大體量的內(nèi)容帝洪,怎能不重要?
著名的問題調(diào)查網(wǎng)站Quora脚猾,曾經(jīng)問過程序員覺得最難的事情是什么葱峡,經(jīng)過大量反饋,命名占卻了一半龙助。
可見砰奕,命名是普遍問題,是難問題提鸟,是大問題军援。
那么,如何處理好這個問題呢称勋?
大叔認(rèn)為:欲正其名胸哥,必使其從類、符實赡鲜、達(dá)意空厌、守一,別無它法银酬。
什么意思嘲更?讓我們分而敘之。
-2-?從其類
所謂從其類揩瞪,是說名字要能準(zhǔn)確表達(dá)事物類別赋朦。
不需解釋,這個名字是成員變量、是類北发、是方法纹因、是函數(shù),是單例琳拨、是集合瞭恰、一目了然。
表達(dá)類別的習(xí)慣有很多狱庇,例如惊畏,用'm_'表達(dá)成員變量,‘f_'表明函數(shù)密任,前綴'_'表明私有颜启,匈牙利命名法中把變量類型冠以名字。
這里不多累述浪讳,標(biāo)準(zhǔn)習(xí)慣實在太多缰盏,無論通用的還是公司自己制定的,統(tǒng)一即可淹遵。
-3- 符其實
所謂符其實口猜,是說名字要能夠符合事物的真實性。
既要簡短透揣,又無歧義济炎;
要做到簡短就要:
1)無多余表達(dá)
例如: isPageRedirectInCurrentWorkflow
如果沒有Other Workflow的情況,InCurrentWorkflow就是多余的辐真。
如果上下文就是表達(dá)Page Redirect须尚,PageRedirect就是多余的。
例如: getAllCustomers
如果沒有Partial Customers, All就是多余的侍咱。
例如:labelString
如果是表達(dá)label字符串耐床,String是多余的。
2)無重復(fù)表達(dá)
例如:類Customer的實例方法getCustomerName
getName即可楔脯,不必重復(fù)Customer
-4-?達(dá)其意
所謂達(dá)其意咙咽,是說名字要準(zhǔn)確表達(dá)意圖。
命名常會用動詞淤年、形容詞來加以修飾钧敞,選好修飾詞也很重要。
“鳥宿池中樹麸粮,僧敲月下門溉苛。”?
唐代詩人賈島弄诲,為了斟酌“推”“敲”二字愚战,行路中都在思考娇唯。準(zhǔn)確表達(dá)命名的意圖,也需要有推敲的精神寂玲。
例如:isXXX常用來判別變量是否是XXX類型塔插。isShouldPay就不恰當(dāng),shouldPay即可拓哟;isInRange也不恰當(dāng), inRange即可想许。
例如:用getXXX, readXXX, fetchXXX, loadXXX要看行為的主體,有沒有讀取的過程断序,有沒有網(wǎng)絡(luò)傳輸流纹,有沒有加載的意圖。
例如:少用when, if這些詞违诗。getPaymentPlanSchedulesWhenModification就是很丑的名字漱凝,可以用getModifiedPaymentPlan。
有些行業(yè)性軟件诸迟,長久以來已經(jīng)形成了些慣用的叫法茸炒,類似于行內(nèi)話,最好能夠參考行業(yè)慣例阵苇。
-5-?守其一
所謂守其一扣典,是說名字要前后一致保持統(tǒng)一。
既是習(xí)慣的統(tǒng)一慎玖,也是情志的統(tǒng)一。
這一點非常重要笛粘,也是最常出的問題所在趁怔。即使命名不準(zhǔn)確,也比前后不統(tǒng)一薪前、混亂無章好润努。
例如:表達(dá)某個集合數(shù)據(jù),有時候用data示括,有時候用items铺浇,有時候用list,有時候用collection垛膝,這就糟了鳍侣。
命名的一致性,是代碼整潔的基礎(chǔ)吼拥,也能體現(xiàn)程序員修養(yǎng)的地方倚聚。
君子尚德,對內(nèi)有誠的一面:言行一致凿可,情志一致惑折。對外有敬的一面:為人著想,不蔓不枝。
今天叫個貓惨驶,明天叫個咪白热,在這里不行。
事無巨細(xì)粗卜,欲寫出漂亮的代碼屋确,要先從好的命名開始。
望諸君三思而命名休建。
-2018.07.04 蘭山 -