如何命名:編程中最難的事
喬治·奧威爾的命名規(guī)范
如何命名?簡(jiǎn)言之,根據(jù)語(yǔ)意來(lái)選擇詞匯,別無(wú)它法……然而,有時(shí)我們會(huì)不知用什么詞匯更合適。
當(dāng)你想到某個(gè)抽象的東西,你更傾向于***想到的詞語(yǔ),除非你故意不這樣,這些詞也會(huì)搶著出現(xiàn),直到模糊或改變你的想法。當(dāng)你想到一個(gè)具體的對(duì)象,你覺(jué)得詞窮,然后你想描述的已經(jīng)看到了,然后你繼續(xù)尋找更適合它的詞。
六條原則
以下是喬治給出的命名六原則:
1. 絕不要用隱喻,明喻或者是其他書(shū)本上看到的語(yǔ)言描述方式
2. 絕不要用太長(zhǎng)的詞匯,如果一個(gè)短的詞匯已能說(shuō)明問(wèn)題
3. 如果可能縮短用語(yǔ),就盡量縮短
4. 絕不要用被動(dòng)語(yǔ)態(tài)的詞,如果能用主動(dòng)語(yǔ)態(tài)的詞
5. 絕不要使用外來(lái)詞匯,學(xué)術(shù)術(shù)語(yǔ),如果你能想到意思相近的日常用語(yǔ)
6. 打破上述任何規(guī)則,相比更加直接明了的說(shuō)話方式
這些規(guī)則聽(tīng)起來(lái)很條文,確實(shí)也是如此。但對(duì)于那些習(xí)慣了流行的寫(xiě)作風(fēng)格的人來(lái)說(shuō),這幾點(diǎn)卻尤為重要。下面具體來(lái)解釋這六條原則。
1、絕不要用隱喻,明喻:以防過(guò)度使用慣用的設(shè)計(jì)模式,只是因?yàn)樵诖a中看慣了。如:
AbstractConfigurationFactory
2、只要能短就不要用長(zhǎng)詞:如果一個(gè)短的詞匯已能說(shuō)明問(wèn)題,則盡量使用簡(jiǎn)潔的變量命名,僅在有更好的理由的前提下才使用長(zhǎng)的命名。如:
company_person_collection
vs
Staff
3、如果可能縮短用語(yǔ),就盡量縮短:避免添加一些毫無(wú)意義的詞匯到命名中。如:
AbstractObjectFormatterProxy
……
org.springframework.web.servlet.support.
AbstractAnnotationConfigDispatcher
ServletInitializer
這就像是同類(lèi)療法。你所應(yīng)該做的就是簡(jiǎn)化,直到什么都沒(méi)有。 ”By Kevlin Henney。
4、盡量用主動(dòng)語(yǔ)態(tài)的詞:能用主動(dòng)就絕不用被動(dòng)語(yǔ)態(tài)的詞,便于用戶理解,同時(shí)也遵守標(biāo)識(shí)符的語(yǔ)法規(guī)則。
如:
class PlanEvents
vs
class EventPlanner,或者甚至是 class Scheduler。
5、盡量用日常用語(yǔ),避免使用外來(lái)詞匯或?qū)W術(shù)術(shù)語(yǔ),不要讓來(lái)自某個(gè)庫(kù)的專用術(shù)語(yǔ)污染你的領(lǐng)域模型,同時(shí)也提防那些從其他語(yǔ)言導(dǎo)進(jìn)外來(lái)”命名的庫(kù)。
如:ShipmentMonad
6、打破上述任何規(guī)則,如果你有更簡(jiǎn)單明了的表述方式。當(dāng)然,如果你的代碼正刊登在眾多知名的網(wǎng)站,如 The Daily WTF,你可以忽略我說(shuō)的話。(The Daily WTF,美國(guó)著名丑陋代碼開(kāi)發(fā)、災(zāi)難開(kāi)發(fā)案例網(wǎng)站。)
注:許多取決于上下文;
當(dāng)然,發(fā)布庫(kù)代碼和維護(hù)私有程序代碼是不一樣的。
聽(tīng)到這,是不是感覺(jué)寫(xiě)代碼和寫(xiě)散文一樣困難?
作家們對(duì)于編程的啟發(fā)
關(guān)于偶編程——斯蒂芬·金(Stephen King)
“關(guān)著門(mén)寫(xiě),開(kāi)著門(mén)重寫(xiě)。”
關(guān)于硬件開(kāi)發(fā)——安妮·賴斯(Anne Rice)
“我發(fā)覺(jué)更大的顯示屏更易讓人專注。”
關(guān)于用戶角色——厄內(nèi)斯特·海明威(Ernest Hemingway)
“當(dāng)寫(xiě)小說(shuō)的時(shí)候,作家應(yīng)該創(chuàng)造鮮活的人物;人物不是角色。角色是在漫畫(huà)里的。”
關(guān)于企業(yè)架構(gòu) ——威廉·薩默塞特·毛姆
“寫(xiě)小說(shuō)有三條規(guī)則,不幸的是,沒(méi)人知道是什么。”
關(guān)于代碼效率——尼爾·蓋曼(Neil Gaiman)
“寫(xiě)作。一個(gè)字接著一個(gè)字。找到正確的詞匯,運(yùn)用它。完成你正在寫(xiě)的東西。無(wú)論如何都請(qǐng)完成,一定要完成。”
關(guān)于代碼審查——尼爾·蓋曼
“把它放在一邊。仔細(xì)閱讀,假裝之前從未閱讀過(guò)。展示給你的朋友,并聽(tīng)取他們的意見(jiàn)和觀點(diǎn)。”
關(guān)于反饋——尼爾·蓋曼
“當(dāng)人們告訴你哪是可能出錯(cuò)了,或者沒(méi)有正常的運(yùn)行,他們幾乎總是對(duì)的。”
“當(dāng)他們告訴你他們認(rèn)為什么是錯(cuò)的,并如何解決它,他們幾乎總是錯(cuò)的。”
關(guān)于重構(gòu)——尼爾·蓋曼
“處理它。請(qǐng)銘記,它能達(dá)到***之前,遲早你都要放下并且繼續(xù)前進(jìn),開(kāi)始寫(xiě)后面的東西。***就是像追逐地平線。 不斷繼續(xù)前進(jìn)。”
關(guān)于代碼里的幽默 ——尼爾·蓋曼
"Laugh at your own jokes." “笑你自己的笑話。”
關(guān)于開(kāi)源——尼爾·蓋曼
"The main rule of writing is that if you do it with enough assurance and confidence, you’re allowed to do whatever you like."
“寫(xiě)作的主要規(guī)則是,如果你有足夠的擔(dān)當(dāng)和自信來(lái)做這件事情,你將被允許做任何你想做的事。”
來(lái)自作家們建議的總結(jié)
來(lái)自作家的建議是有用的,不僅僅是對(duì)于編程中的命名。作家已經(jīng)存在幾個(gè)世紀(jì)、而編程僅僅有幾十年的歷史。此外,如果你真正理解了,他們的建議其實(shí)是更好的寫(xiě)作和更多快樂(lè)。















 
 
 







 
 
 
 