軟件雜談(2)- 正名

正名者,辨正名分也。

這一篇,我們簡(jiǎn)短聊一個(gè)很多人不屑于聊的話題,程序中的命名問題。

也就是說,我們?cè)趯懗绦虻臅r(shí)候,一個(gè)函數(shù)、變量、類、名空間、文件到底應(yīng)該如何辨正名分。

這個(gè)問題看似不值一提,可在大叔眼里,命名非常重要,名字好壞有可能決定程序的命運(yùn)。

什么!什么!沒這么嚴(yán)重吧?


-1- 正名很重要


古人云:“立品為先,字如其人”。

意思是,先端正做人,再端正寫字,通過寫字能夠影射出一個(gè)人的性格、心理、能力。

寫程序也類似,通過代碼中的命名也能夠看出一個(gè)程序員的修養(yǎng)與功底。欲正其名,先正其心,一個(gè)連變量名都起不好的程序員,很難寫出漂亮的代碼。

《論語(yǔ)·子路》篇有“名不正則言不順,言不順則事不成”之說。名分不當(dāng)、名實(shí)不符,說話就不合理,事情就很難辦成。

程序既然是由編程語(yǔ)言表達(dá)的,名不正也會(huì)導(dǎo)致言不順。命名不恰當(dāng),會(huì)造成大問題。如果你無(wú)法想出一個(gè)合適的名字,也許意味著你的設(shè)計(jì)有問題,需要加以重視。

試著想一想,假如把高級(jí)語(yǔ)言程序中的關(guān)鍵字、保留字、邏輯運(yùn)算符號(hào)統(tǒng)統(tǒng)去掉,可不就剩下你那些命名了嗎?這么大體量的內(nèi)容,怎能不重要?

著名的問題調(diào)查網(wǎng)站Quora,曾經(jīng)問過程序員覺得最難的事情是什么,經(jīng)過大量反饋,命名占卻了一半。

可見,命名是普遍問題,是難問題,是大問題。


那么,如何處理好這個(gè)問題呢?

大叔認(rèn)為:欲正其名,必使其從類、符實(shí)、達(dá)意、守一,別無(wú)它法。

什么意思?讓我們分而敘之。


-2-?從其類


所謂從其類,是說名字要能準(zhǔn)確表達(dá)事物類別。

不需解釋,這個(gè)名字是成員變量、是類、是方法、是函數(shù),是單例、是集合、一目了然。

表達(dá)類別的習(xí)慣有很多,例如,用'm_'表達(dá)成員變量,‘f_'表明函數(shù),前綴'_'表明私有,匈牙利命名法中把變量類型冠以名字。

這里不多累述,標(biāo)準(zhǔn)習(xí)慣實(shí)在太多,無(wú)論通用的還是公司自己制定的,統(tǒng)一即可。


-3- 符其實(shí)


所謂符其實(shí),是說名字要能夠符合事物的真實(shí)性。

既要簡(jiǎn)短,又無(wú)歧義;

要做到簡(jiǎn)短就要:

1)無(wú)多余表達(dá)

例如: isPageRedirectInCurrentWorkflow

如果沒有Other Workflow的情況,InCurrentWorkflow就是多余的。

如果上下文就是表達(dá)Page Redirect,PageRedirect就是多余的。

例如: getAllCustomers

如果沒有Partial Customers, All就是多余的。

例如:labelString

如果是表達(dá)label字符串,String是多余的。

2)無(wú)重復(fù)表達(dá)

例如:類Customer的實(shí)例方法getCustomerName

getName即可,不必重復(fù)Customer


-4-?達(dá)其意


所謂達(dá)其意,是說名字要準(zhǔn)確表達(dá)意圖。

命名常會(huì)用動(dòng)詞、形容詞來(lái)加以修飾,選好修飾詞也很重要。

“鳥宿池中樹,僧敲月下門?!?

唐代詩(shī)人賈島,為了斟酌“推”“敲”二字,行路中都在思考。準(zhǔn)確表達(dá)命名的意圖,也需要有推敲的精神。

例如:isXXX常用來(lái)判別變量是否是XXX類型。isShouldPay就不恰當(dāng),shouldPay即可;isInRange也不恰當(dāng), inRange即可。

例如:用getXXX, readXXX, fetchXXX, loadXXX要看行為的主體,有沒有讀取的過程,有沒有網(wǎng)絡(luò)傳輸,有沒有加載的意圖。

例如:少用when, if這些詞。getPaymentPlanSchedulesWhenModification就是很丑的名字,可以用getModifiedPaymentPlan。

有些行業(yè)性軟件,長(zhǎng)久以來(lái)已經(jīng)形成了些慣用的叫法,類似于行內(nèi)話,最好能夠參考行業(yè)慣例。


-5-?守其一


所謂守其一,是說名字要前后一致保持統(tǒng)一。

既是習(xí)慣的統(tǒng)一,也是情志的統(tǒng)一。

這一點(diǎn)非常重要,也是最常出的問題所在。即使命名不準(zhǔn)確,也比前后不統(tǒng)一、混亂無(wú)章好。

例如:表達(dá)某個(gè)集合數(shù)據(jù),有時(shí)候用data,有時(shí)候用items,有時(shí)候用list,有時(shí)候用collection,這就糟了。

命名的一致性,是代碼整潔的基礎(chǔ),也能體現(xiàn)程序員修養(yǎng)的地方。

君子尚德,對(duì)內(nèi)有誠(chéng)的一面:言行一致,情志一致。對(duì)外有敬的一面:為人著想,不蔓不枝。

今天叫個(gè)貓,明天叫個(gè)咪,在這里不行。

事無(wú)巨細(xì),欲寫出漂亮的代碼,要先從好的命名開始。

望諸君三思而命名。


-2018.07.04 蘭山 -

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 要對(duì)自己足夠狠 才有可能得到想要的
    天娜日記閱讀 176評(píng)論 0 0

友情鏈接更多精彩內(nèi)容