
把標題改成《如何給你的娃起個好名字》,會不會大大提高點擊點擊量呀。
本篇將從三方面來說明變量名的重要性,及取名的方法:
- 為什么 current 是個壞名字?
- 衡量好名字的標準
- 立即可用的命名方法
1. 為什么 current 是個壞名字?
current 常常會納入程序員的法眼,初看 current 表意還挺明確,比x,i,j,c要明確多了?仔細斟酌后,發(fā)現(xiàn) current 是很糟糕的名字,表示 “當前” 什么,“當前人員”還是“當前日期”,還是“當前計算和”?current 沒有告訴你,每次都需要看很多代碼才能最終確定,說不定還得配上一大段注釋。
下圖是github上命名為current的變量,能說出該變量保存的是什么嗎?

準確來說,變量名就是變量,需要慎重對待。給自己家的寵物狗取名小黃、小白,比取名“狗1,狗2,大狗,小狗”,要明確的多,就是因為帶上了小狗的特征,變量名也應(yīng)該如此:
不需要解釋的才是好名字
2. 衡量好名字的標準
看一個變量名好不好,要看是否準確地描述了用戶的需求,如果用戶需求是 employe(雇員),就不應(yīng)該使用 person(人)。
還有個很常見的變量,我們常會把狀態(tài)標記命名為 bitFlag(比特標記),有經(jīng)驗的程序員可能會猜測出該變量的功能,甚至是占用內(nèi)存大小,但這僅僅說明 bitFlag 是“怎么做的”,而關(guān)于這個標記是“做什么的”,我們一無所知,所以不如取名為 wifiReady,這樣可以馬上知道該標記是表示“wifi網(wǎng)絡(luò)是否準備好”;同樣的理由,把求和結(jié)果放在 sum中 就比 value 好。
所以,仔細看看需求文檔,查查權(quán)威字典,確認找到的單詞能準確表達需求描述的東西。
好變量名的原則就是:是什么就叫什么!
3. 立即可用的命名方法
方法0. 用自然語言描述變量,然后找合適單詞組合
先用自然句子描述變量的作用:“一個用于顯示地名的文字標簽”;
然后去掉句子中的數(shù)量詞、動詞,將名詞串聯(lián)起來:
PlaceNameLabel
再如:
一個顯示中國城市名稱的列表:CityNameOfChinaTable
顯示世界某國城市名稱列表:CityNameOfCountryTable
方法1. 把限定詞放在最后
一個項目中,為避免同時出現(xiàn) totalRevenue 和 revenueTotal ,把 total 這樣表示變量屬性的詞,都統(tǒng)一放在名字的最后,這樣我們在程序中可以避免大量的歧義:revenueTotal(總收入),expenseTotal(總支出),expenseAverage(平均支出)等等都是意思表達很明確的詞,而且表現(xiàn)出統(tǒng)一的規(guī)律,反過來就有點繞了: totalExpense,averageExpense。
限定詞表
| 單詞 | 含義 |
|---|---|
| total | 總額 |
| sum | 求和 |
| average | 平均值 |
| max | 平均值 |
| min | 平均值 |
| record | 記錄 |
| string | 字符串 |
| pointer | 指針 |
方法2:準確使用成對的詞
對照下表,不需要再思考如何找到對應(yīng)的單詞了。
成對出現(xiàn)的詞表
| 單詞對 | 含義 |
|---|---|
| begin / end | 開始 / 結(jié)束 |
| first / last | 第一個 / 最后一個 |
| locked / unlocked | 加鎖 / 解鎖 |
| min / max | 最小 / 最大 |
| previous / next | 前一個 / 后一個 |
| old / new | 舊的 / 新的 |
| opened / closed | 打開 / 關(guān)閉 |
| visible / invisible | 可見的 / 不可見 |
| source / target | 來源 / 目標 |
| source / destination | 出發(fā)處 / 目的地 |
| up / down | 上 / 下 |
| expand / fold | 展開 / 折疊 |
| login / logout | 登錄 / 登出 |
方法3. 區(qū)分子系統(tǒng)
實際開發(fā)中,對于一個對象,比如同樣的 employe ,獲取途徑往往不同,從網(wǎng)絡(luò)接口拿到的 employe 的工資叫 revenue ,而界面上用的卻稱為 pay,相同對象的數(shù)據(jù)在不同子系統(tǒng)里卻有不同的名稱,大部分情況我們不能要求服務(wù)端做對應(yīng)修改,為了避免這種混亂,可以分別將服務(wù)端的雇員命名為 ServerEmploye,將界面使用的 UIEmploye。
方法4. 不要混用近似單詞
我曾經(jīng)參與開發(fā)的一個APP有個首頁模塊,主界面控制器命名為 HomeViewController,結(jié)果開發(fā)用戶設(shè)置界面的兄弟將他的控制器命名為 UserHomeViewController,而在寫tableView單元格的時候,又命名為 CustomerHomeCell,可怕的是,有些開發(fā)人員還把其它界面的主入口也命名為 home,比如BookReaderHomeViewController,你們可以想象一下,當我要找首頁類,輸入 home, 看到查找結(jié)果時的心情。
所以花點時間,與小組開發(fā)人員約定,對于用戶對象,在 user 和 customer 選一個就好;搜一下代碼庫,發(fā)現(xiàn)大家表示顏色,都用 color, 就不要使用 colour。
還要注意單詞的拼寫錯誤,從數(shù)據(jù)庫查出來的視頻叫做 vedio ,就不要全部都以誤傳誤的全部都使用 vedio,這樣會導(dǎo)致因為一個單詞,開發(fā)小組辯論20分鐘,還有幾個堅持 vedio 是正確拼寫的窘境;如果實在不知道正確拼寫,就用 movie 吧。
現(xiàn)在,你應(yīng)該對變量名的重要性,取名的方法有了一定的認識了吧,正如《計算機程序的構(gòu)造和解釋》中的名言:
“代碼是寫給人看的,不是寫給機器看的,只是順便計算機可以執(zhí)行而已”
起好變量名,是成為優(yōu)秀程序員的第一步,也是最容易入手的一步。