探索命名之美(二)

"溫故而知新秽荞,可以為師矣" -- 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

命名是一個很困難的過程,即便這些理論和方法我已經很熟悉剧辐,但是在日常的編碼時還是會遇到各種各樣的困難寒亥。大家有遇到命名困難的時候可以多和身邊的同事討論,當然也歡迎留言和我進行討論荧关,一起為寫出簡單易懂的代碼而努力溉奕。

希望小文能幫助對各位朋友的工作與學習起到幫助的作用。:)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末忍啤,一起剝皮案震驚了整個濱河市加勤,隨后出現的幾起案子,更是在濱河造成了極大的恐慌同波,老刑警劉巖鳄梅,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異未檩,居然都是意外死亡戴尸,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門冤狡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來校赤,“玉大人,你說我怎么就攤上這事筒溃。” “怎么了沾乘?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵怜奖,是天一觀的道長。 經常有香客問我翅阵,道長歪玲,這世上最難降的妖魔是什么迁央? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮滥崩,結果婚禮上岖圈,老公的妹妹穿的比我還像新娘。我一直安慰自己钙皮,他們只是感情好蜂科,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著短条,像睡著了一般导匣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茸时,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天贡定,我揣著相機與錄音,去河邊找鬼可都。 笑死缓待,一個胖子當著我的面吹牛,可吹牛的內容都是我干的渠牲。 我是一名探鬼主播旋炒,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嘱兼!你這毒婦竟也來了国葬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤芹壕,失蹤者是張志新(化名)和其女友劉穎汇四,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體踢涌,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡通孽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了睁壁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片背苦。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖潘明,靈堂內的尸體忽然破棺而出行剂,到底是詐尸還是另有隱情,我是刑警寧澤钳降,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布厚宰,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏铲觉。R本人自食惡果不足惜澈蝙,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撵幽。 院中可真熱鬧灯荧,春花似錦、人聲如沸盐杂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽况褪。三九已至撕贞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間测垛,已是汗流浹背捏膨。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留食侮,地道東北人号涯。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像锯七,于是被迫代替她去往敵國和親链快。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理眉尸,服務發(fā)現域蜗,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 1噪猾、引言 數據庫設計過程中表霉祸、字段等的命名規(guī)范也算是設計規(guī)范的一部分,不過設計規(guī)范更多的是為了確保數據庫設計的合理...
    SnowflakeCloud閱讀 40,961評論 0 48
  • 文章來自https://github.com/Blankj/AndroidStandardDevelop#安卓開發(fā)...
    小莊bb閱讀 751評論 0 1
  • 開發(fā)cocoa框架袱蜡、插件或者其它帶公共API的可執(zhí)行文件需要不同于應用開發(fā)一些方法和慣例丝蹭。你的產品的主要客戶是開發(fā)...
    醬油不愛醋閱讀 1,632評論 0 4
  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產品代碼質量,指導廣大軟件開發(fā)人員編寫出簡潔、可維護坪蚁、可靠奔穿、可 測試、高效...
    iOS行者閱讀 4,445評論 21 35