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