"溫故而知新秽荞,可以為師矣" -- Dr.孔夫子
在做過第三次有關命名的分享后抚官,我決定將命名的方法更新一下。
前情回顧
上一篇钦听,我們說了給函數或者變量命名的幾種基本方法朴上,總結如下:
- 基于已有認知卒煞。如果在領域里已經有一些約定俗成的函數命名,最好直接拿來用畔裕。
- 盡量反映函數的通用性扮饶。
- 能望文生義。好的命名應該一目了然扛点,而且針對不同的情況應該做不同的命名占键。
- 由句到詞元潘。遇到不知道改怎么命名的函數,先用一句話將函數描述出來牲距,再逐漸提煉、精簡句子結構咖摹,最終提煉出函數名稱难述。
- 類比胁后、聯想攀芯。如果找不到合適的詞語,可以采用類比殖演、聯想等方式趴久,形象的表述一個函數的含義朋鞍。
- 易于理解妥箕。盡量不用一些容易造成誤解的詞語。
大家在編碼或者讀代碼的過程中坎吻,對于什么樣的命名是好的命名可能認知不是特別清晰瘦真,但是對于什么樣的命名是壞的命名應該一目了然黍瞧,他們包括:
命名里哪些是禁忌
- 拼音印颤。 拼音是命名中萬惡之首。大家對于程序的固有認知是它是基于英語系的命名標準,所以如果用拼音际看、甚至拼音縮寫,會讓讀代碼的人一頭霧水仲闽,無從下手赖欣。比如我曾經讀到過類似于“CXF”酱酬、“MDD”等命名的變量,如果我不告訴你它們是“磁懸浮”汗菜、“目的地”巡揍,估計永遠猜不到。所以用拼音命名是非常不推薦的腮敌。當然如果有條件的話糜工,用中文(注意是中文捌木,不是拼音)做變量名我覺得也可以,比如易語言或者Swift嫉戚。
- 數字刨裆。 我個人的經歷可以說明,數字完全可以避免彬檀。即便是同一類食物帆啃,也可以通過細致的描述加以區(qū)分,而不是用數字來區(qū)分窍帝。例如button1努潘,button2可以改成upperButton,lowerButton。而且一旦使用數字進行命名慈俯,后續(xù)如果需要修改控件順序會發(fā)生災難渤刃,就需要人為建立button1是第二個button的怪異映射。
- 含義錯誤贴膘。 這個經常發(fā)生在單詞量少的同學身上卖子。例如將桌子命名為椅子這種錯誤,是可以通過查看字典避免的诫舅。但是這里要說明的是娃闲,覺不要單單通過字面意思來查字典卷哩,請看這個單詞或者詞組在例句中是不是想要的意思渐白,而且最好參考大公司或者著名文章的選詞,而不是網絡文章的選詞褒颈。
- 保留字刨疼。 使用保留字而造成的bug是我遇到的最難以察覺的bug之一亭畜,原因是人們很難察覺到命名不當會產生bug蜗搔。實際上,以iOS為例,如果使用get或者set作為函數命名的前綴時服鹅,系統(tǒng)會默認你在override某個變量的getter和setter方法,此時如果恰好你的類中有對應的變量時,變量的讀寫很有可能會出現使用問題斟珊。
- 混搭。 目前比較流行的命名規(guī)則有駝峰命名以及下劃線命名等。個人認為一個項目中示惊,要么統(tǒng)一使用駝峰命名录择,要么統(tǒng)一使用下劃線命名,但是不要混搭精偿。個人認為iOS項目中使用駝峰比較多,前端項目中(js)使用下劃線比較多。
說了不少大家在編碼時候的壞習慣,也順便說下自己在編碼時的好習慣以及方法,供大家參考。
命名應該遵循的規(guī)則
- 具體按厘。命名時刻剥,我認為第一要具體漓藕。具體指的是可以一目了然的知道其所指代的含義暑脆。例如在一個復雜的視圖結構中,應該明確的命名confirmButton跟cancelButton而不僅僅命名為button僵腺。
- 精簡鲤孵。如果在環(huán)境普监,或者上下文清晰的條件下,命名越精簡閱讀成本越小夺饲,編寫調用過程中也會越流暢浩销。例如在只有一個Button的View結構中,按鈕可以命名為button讳嘱,因為上下文決定了這個button是唯一的棘伴。
- 使用固定的組合結構寞埠,例如表示事物用名詞或者名詞+名詞,表示動作用動詞或者動詞+賓語焊夸。這個組合可以通過上一篇文章里Mathematica的命名結構分析里可以看出來仁连。
- 對函數來說,先解構阱穗,再命名饭冬。有時候函數難以命名是因為它被賦予了太多功能。例如一個函數如果既做了初始化揪阶,又做了布局昌抠,還做了事件處理,當然命名時會很崩潰鲁僚。因此這種情況炊苫,要先把這個函數拆分為三個子函數,初始化子函數冰沙、布局子函數侨艾、事件處理子函數,然后再逐一命名拓挥。
- 參考權威唠梨。必要時,可以去參考下權威的SDK或者API的函數命名侥啤,跟著權威的思路和方法走走不會出錯当叭。具體會在下文給出示例茬故。
- 注釋。如果真的不想花時間思考命名科展,那至少請給出注釋均牢。不然一旦有一天你的同事幫你處理這段代碼的時候會死傷無數腦細胞。
案例分析
這里我們來分析并總結一下蘋果的iOS的SDK命名規(guī)則是怎樣的才睹。(本章節(jié)中所有命名來源于蘋果SDK)
- UI控件:功能描述+類型徘跪,例如
menuButtons
- 常量:描述對象+類型,例如
rowHeight
- 文件名:通常會加前綴琅攘,例如
UIButton
- 通知:前綴+對象+(助動詞)+賓語+Notification 垮庐,例如
UIMenuControllerDidShowMenuNotification
- 代理:前綴+對象+Delegate,例如
WKNavigationDelegate
- 協議:對象+(助動詞)+動作+賓語,例如
tableViewdidEndDisplayingFooterView
- 枚舉:定義好枚舉名之后請將所有成員加上該名稱作為前綴坞琴,中間不要加下劃線哨查,例如
UITableViewStylePlain , UITableViewStyleGrouped
命名是一個很困難的過程,即便這些理論和方法我已經很熟悉剧辐,但是在日常的編碼時還是會遇到各種各樣的困難寒亥。大家有遇到命名困難的時候可以多和身邊的同事討論,當然也歡迎留言和我進行討論荧关,一起為寫出簡單易懂的代碼而努力溉奕。
希望小文能幫助對各位朋友的工作與學習起到幫助的作用。:)