代碼命名習(xí)慣——信達(dá)雅

吟安一個(gè)字,捻斷數(shù)莖須。

Two hard things :

  • cache invalidate
  • naming

一些個(gè)階段:

  • 功能 work 的代碼
  • 天花亂墜, 炫技的代碼
  • 優(yōu)雅的代碼
  • 易被讀懂的代碼

代碼功底亦是一種修行, 摸索階段總是琢磨著將功能實(shí)現(xiàn)了

后面開始接觸各大分支技術(shù), 有了一定沉淀, 閱讀了一些源碼, 優(yōu)秀框架后

會(huì)寫一些過度設(shè)計(jì), 天花亂墜, 炫技的代碼

而后大成, 寫的是 優(yōu)雅口口傳頌, 易被讀懂的代碼。

若將代碼比作武學(xué), 命名就是好內(nèi)功

張無忌獨(dú)步武林, 天賦異稟, 正是有九陽神功內(nèi)功加持打底

如果你也開始為一個(gè)命名思考了很久 ?

文言翻譯講究: 信達(dá)雅, 命名類似。

信: 信服
命名起碼應(yīng)該是準(zhǔn)確的。

如果寫一個(gè) 回調(diào), 我們會(huì)命名為 XXXListener, 然后定義 一個(gè) onXXX方法
而不會(huì)寫一個(gè) XXXResponser, XXXReactor
命名是要傳達(dá) context 的, 要遵傳彼此的習(xí)慣。

類型 類名可選后綴
控制類 Processor、Manager、Engine、Center、Core、Reaper
生產(chǎn)類 Factory、Pool、Maker、Builder
工具類 Util、Helper
數(shù)據(jù)類 Bean、Request、Response、Query(名次表意即可)
回調(diào)類 Callback、Trigger、Listener、Handler
監(jiān)控類 Reporter、Metric、Tracker
結(jié)構(gòu)類 Wrapper、Iterator、Batch
設(shè)計(jì)模式 Adapter、Action、Command、Event、Delegate、Builder、Factory、Template、Proxy、Delegate

以上是一些常見的命名習(xí)慣, 可以讓程序員心心相通
InsertCommend : 立刻明白這是一個(gè)命令模式, 是一個(gè) insert 的原子操作,整套架構(gòu)應(yīng)該是設(shè)計(jì)為一些 commend 來驅(qū)動(dòng)執(zhí)行

除了這些常用的后綴, 也要注意命名的詞性講究:
方法常用動(dòng)詞, 變量 :名詞/形容詞

如果是一個(gè)開關(guān):
這里可選表達(dá)很多, 很多情況根據(jù)語境, 最好使用形成規(guī)范, 統(tǒng)一個(gè)人風(fēng)格,閱讀起來爽很多

if (enableAFeature) {
  doAThing();
}

if (aFeatureEnable) {
  doAThing();
}

if (aFeatureValid) {
  doAThing();
}

if (isAFeature) {
  doAThing();
}

if (useAFeature) {
  doAThing();
}

if (aFeatureSwitchOn) {
  doAThing();
}

if (disableAFeature) {
  doAThing();
}

if (aFeatureDisable) {
  doAThing();
}

if (aFeatureInValid) {
  doAThing();
}

if (notAFeature) {
  doAThing();
}

if (aFeatureSwitchOff) {
  doAThing();
}

相比之下 switchOn , switchOff 是 if 語句開關(guān)語境很合適的通用表達(dá),
理論上以上都可以, 但是 個(gè)人代碼風(fēng)格一致性尤為重要, 習(xí)慣統(tǒng)一尤為重要。
最好形成固定的表達(dá)方式, 來寫代碼。

請(qǐng)不要在 if 中寫很多邏輯, 取很多反

達(dá)

達(dá): 不拘,通達(dá)明白

達(dá)這里有一點(diǎn), 最小化信息傳遞原則, 如果你也害怕接受很多信息。

信息傳遞越多決策越難

我們的思維是 層層封裝,暴露最少信息, 彼此隔離, 借口層業(yè)務(wù)層。

怎么在代碼中做到傳遞最少信息:
比如: project aa; module: bb; 包目錄: article/query/ 下
寫請(qǐng)求相關(guān)Bean 類:
AABBArticleQuery
AABBArticleResponse
AABBArticleRequest

這就是浪費(fèi): 直接寫:
Query
Response
Request

project 包目錄 會(huì)傳遞很多 context
不要在命名中傳遞很多無用信息:
AABBArticleQuery

一個(gè) Bean 類, 長(zhǎng)命名, 導(dǎo)致的是對(duì)Bean類中成員的 調(diào)用 變得很惡心
表現(xiàn)在: 很長(zhǎng)串, 產(chǎn)生 厭煩

保持 clean , 使代碼看起來 清晰明了

雅: 雅致

雅致的命名使得代碼變得文雅, 讀起來不容易 wtf

記得高中英語老師將莎士比亞十四行詩來作為大家晨讀英語的材料

Shall I compare thee to a summer's day? 
Thou art more lovely and more temperate. 
Rough winds do shake the darling buds of May, 
And summer's lease hath all too short a date.

韻腳

枯藤老樹昏鴉,
小橋流水人家,
古道西風(fēng)瘦馬。

夕陽西下,
斷腸人在天涯。

每句末尾均壓一個(gè) a 韻

寫一個(gè)分支可以這樣:
feature_feed_fling_flavor

這個(gè)是意識(shí)形態(tài)的培養(yǎng), 并不是需要在代碼中這樣做。

用詞

組件, 開源組件命名可以具像化, 具像化的實(shí)物

飛書命名: Lark 云雀

Kotlin: 一個(gè)島名: Kotlin Island

sladar: 斯拉達(dá)(Slardar)是Dota2中的一位力量英雄。(字節(jié)系組件,網(wǎng)上可搜到避免敏感不闡述)

libra: 天秤座(字節(jié)系組件,網(wǎng)上可搜到避免敏感不闡述)

仔細(xì)品味下這幾個(gè)命名, 感覺還是很妙, 很有巧思。

動(dòng)植物、地點(diǎn)、人物名字、名畫 等

這里貼上 古希臘眾神:

古希臘眾神:

宙斯:(羅馬又稱朱庇特)Zeus,天神之父,地上萬物的最高統(tǒng)治者。

赫拉:(羅馬又稱朱諾)Hera,宙斯的姐姐與妻子。是女性的代表,掌管婚姻和生育。性格特征是嫉妒。

波塞冬:(羅馬又稱尼普東)Poseidon,海王,海洋和水域的一切主宰。

得墨忒耳:(羅馬又稱賽爾斯)Demeter,大地女神,司豐收。

哈底斯:(羅馬又稱普魯通)Hades,冥王,司掌冥界,統(tǒng)治陰暗的世界。

雅典娜:(羅馬又稱米諾娃)Athena,起初被視為女戰(zhàn)神,后逐漸變?yōu)橹腔叟窈脱诺涑堑氖刈o(hù)女神。

阿波羅:(羅馬也稱阿波羅)Apollo,在詩與藝術(shù)中表現(xiàn)為光明、青春和音樂之神,又是太陽神,與阿爾忒彌斯是孿生姐弟。

阿爾忒彌斯:(羅馬又稱狄安娜)Artemis ,月神,又是狩獵之神、婦女之神,是女性純潔的化身,與阿波羅是孿生姐弟。

狄俄尼索斯:(羅馬又稱巴克科斯)Dionysus,酒神與狂飲歡樂之神。

阿佛洛狄德:(羅馬又稱維納斯)Aphrodite,愛情女神。她的忠實(shí)隨從小愛神愛羅斯Eros(羅馬又稱邱比特)手持弓箭,被其金箭射中者即與隨后見到的第一個(gè)人墜入情網(wǎng),而被其鉛箭射中者會(huì)對(duì)另一個(gè)人產(chǎn)生莫名的仇恨。

赫斐斯托斯:(羅馬又稱烏爾肯)Hephaestus,火神和鍛冶之神。

阿瑞斯:(羅馬又稱瑪爾斯)Ares ,戰(zhàn)神。

星座

水瓶座 ? Aquarius Water Carrier / Water Bearer
雙魚座 ? Pisces Fish / Fishes
牧羊座 ? Aries Ram
金牛座 ? Taurus Bull
雙子座 ? Gemini Twins
巨蟹座 ? Cancer Crab
獅子座 ? Leo Lion
處女座 ? Virgo Virgin
天秤座 ? Libra Scales / Balance
天蠍座 ? Scorpio Scorpion
射手座 ? Sagittarius Archer
摩羯座 ? Capricorn Goat / Sea Goat

參考: https://juejin.cn/post/6995342820512890893#heading-14

最后, 命名是一個(gè)過程,是 life long journey 。

?著作權(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)容

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