亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

高質量代碼的命名法則

2024-04-27 15:13:09
字體:
來源:轉載
供稿:網友

    本文與大家聊一聊編程中非常關鍵的一個點,如何更好的對代碼命名。

 

  一、引言

《代碼整潔之道》這本書提出了一個觀點:代碼質量與其整潔度成正比,干凈的代碼,既在質量上可靠,也為后期維護、升級奠定了良好基礎。書中介紹的規則均來自作者多年的實踐經驗,涵蓋從命名到重構的多個編程方面,雖為一“家”之言,然誠有可資借鑒的價值。

但我們知道,很多時候,理想很豐滿,現實很骨感,也知道人在江湖,身不由己。因為項目的緊迫性,需求的多樣性,我們無法時時刻刻都寫出整潔的代碼,保持自己輸出的都是高質量、優雅的代碼。

但若我們理解了代碼整潔之道的精髓,我們會知道怎樣讓自己的代碼更加優雅、整潔、易讀、易擴展,知道真正整潔的代碼應該是怎么樣的,也許就會漸漸養成持續輸出整潔代碼的習慣。

而且或許你會發現,若你一直保持輸出整潔代碼的習慣,長期來看,會讓你的整體效率和代碼質量大大提升。

 二、本文涉及知識點思維導圖

先放出這篇文章所涉及內容知識點的一張思維導圖,就開始正文。大家若是疲于閱讀文章正文,直接看這張圖,也是可以Get到本文的主要知識點的大概。

 三、高質量代碼的命名法則

 1 名副其實

 

名副其實說起來貌似很簡單,但真正做起來,似乎沒那么容易。選個好名字要花一些時間,但其實選好名字之后省下來的時間,要比之前選名字時花掉的時間多得多。

我們一旦發現有更好的名稱時,就應該換掉之前的舊名稱,這樣做讀你代碼的人(包括你自己),都會很開心。

一個好的變量、函數或類的名稱應該已經幾乎答復了所有的大問題。它應該告訴你,這個名稱所代表的內容,為什么會存在,做了什么事情,應該如何用等。

如果一個名稱需要注釋來補充才能讓大家明白其真正含義,那其實就不算是名副其實。(并不是說不需要注釋,恰如其分的注釋是程序員讓自己代碼錦上添花的好方法,關于注釋的一些注意事項,稍后會有文章專門涉及。)

舉個栗子:

 

以下的這句代碼里的d就不算是個好命名。名稱d什么都沒說,它沒引起我們對時間消逝的感覺,更別說單位是天了:

[cpp] view plain copy PRint?在CODE上查看代碼片派生到我的代碼片int d; // elapsed time in days||經過了幾天時間  

我們應該選擇這樣的指明了計量對象和計量單位的名稱:

[cpp] view plain copy print?在CODE上查看代碼片派生到我的代碼片int elapsedTimeInDays;  int daysSinceCreation;  int daysSinceModification;  int fileAgeInDays;  

 

 2 避免造成誤導

 

我們應該避免留下隱藏代碼本意的錯誤線索,也應該避免使用與本意相悖的詞。例如,別用accountList來指一組賬號,除非它真的是List類型,用accountGroup、bunchOfAccounts,或者直接用accounts,都是更好的選擇。

盡量提防長得太像的名稱。想區分XYZControllerForEfficientHandlingOfStrings和XYZControllerForEfficientStorageOfStrings,會花費我們太多的時間。因為這兩個詞,實在太相似了。

 以同樣的方式拼寫出同樣的概念才是信息,拼寫前后不一致就是誤導。

 3 盡量做有意義的區分

 

1.盡量避免使用數字系列命名(a1、a2…….aN)。這樣的名稱純屬誤導,因為很多時候完全沒有提供正確的信息,沒有提供導向作者意圖的線索。

2.廢話是另一種沒有意義的區分。如果我們有一個Product類,還有一個ProductInfo或ProductData類,那么他們的名稱雖然不同,但意思卻無區別。這里的Info、Data就像a、an和the一樣,是意義含混的廢話。

注意,只要體現出有意義的區分,使用a、the這樣的前綴就沒錯。例如,將a用在域內變量,把the用于函數參數。

 

 4 盡量使用讀得出來的名稱

我們要使用讀得出來的名稱。如果名稱讀不出來,討論的時候就會不方便且很尷尬,甚至讓旁人覺得很蠢。

例如,變量名稱是beeceearrthreecee,討論的時候讀起來簡直像沒吃藥。

 

 

 5 盡量使用可搜索的名稱

 

單字母和數字常量有個問題,就是很難再一大篇文字中找出來。

找MAX_CLASSED_PER_STUDENT很容易,但想找數字7,就很麻煩。

同樣,字母e也不是個便于搜索的好變量名。因為作為英文中最常用的字母,在每個程序、每段代碼中都有可能出現。

 名稱長短應與其作用域大小相對應,若變量或常量可能在代碼中多處使用,應賦予其以便于搜索的名稱。

舉個栗子,比較如下兩段代碼:

[cpp] view plain copy print?在CODE上查看代碼片派生到我的代碼片for (int j=0; j<34; j++)  {      s += (t[j]*4)/5;  }  

[cpp] view plain copy print?在CODE上查看代碼片派生到我的代碼片const int WORK_DAYS_PER_WEEK = 5;  int sum = 0;  for (int j=0; j < NUMBER_OF_TASKS; j++)  {      int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;      int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);      sum += realTaskWeeks;  }  

按整潔代碼的要求來評判,第一段代碼會讓讀者不知所云,第二段代碼比第一段好太多。第二段代碼中,sum并非特別有用的名稱,但至少他搜索得到。采用能表達意圖的名稱,貌似拉長了函數代碼,但要想想看,WORK_DAYS_PER_WEEK要比數字5好找得多,而列表中也只剩下了體現我們意圖的名稱。

 6 取名不要繞彎子

 

我們取名的時候要避免思維映射,不應當讓讀者在腦中把你的名稱翻譯為他們熟知的名稱,也就是說取名不要繞彎子,而是要直白,直截了當。

 在多數情況下,單字母不是個好的命名選擇,除非是在作用域小、沒有名稱沖突的地方,比如循環。循環計數器自然有可能被命名為i,j或k(最好別用字母l),這是因為傳統上我們慣用單字母名稱做循環計數器。

 程序員通常都是聰明人,聰明人有時會借助腦筋急轉彎炫耀其聰明。而聰明程序員和專業程序員之間的區別在于,專業程序員了解,明確就是王道。專業的程序員善用其能,能編寫出其他人能理解的代碼。

 

 7 類名盡量用名詞

類名盡量用名詞或名詞短語,比如Customer, Wikipage,Account, 或 AddressParser。

類名最好不要是動詞。

 

 8 方法名盡量用動詞

 

方法名盡量用動詞或動詞短語。比如postPayment, deletePage, 或者save。

屬性訪問器、修改器和斷言應該根據其value來命名,并根據標準加上get、set和is前綴。

舉個栗子,這里的getName、setName等命名都很OK:

[cpp] view plain copy print?在CODE上查看代碼片派生到我的代碼片string name = employee.getName();  customer.setName("mike");  if (paycheck.isPosted())...  

而重載構造器時,使用描述了參數的靜態工廠方法名。如:

[cpp] view plain copy print?在CODE上查看代碼片派生到我的代碼片Complex fulcrumPoint =Complex.FromRealNumber(666.0);  

通常好于:

[cpp] view plain copy print?在CODE上查看代碼片派生到我的代碼片Complex fulcrumPoint = new Complex(666.0);  

我們也可以考慮將相應的構造器設置為private,強制使用這種命名手段。

 

 9 每個概念對應一詞,并一以貫之

我們需給每個概念選一個詞,并且一以貫之。

例如,使用fetch、retrieve和get來給在多個類中的同種方法命名,你怎么記得住哪個類中是哪個方法呢?

同樣,在同一堆代碼中混用controller、manager,driver,就會令人困惑。DeviceManager和Protocol-Controller之間有何根本區別?為什么不全用controller或者manager?他們都是Driver嗎?這就會讓讀者以為這兩個對象是不同的類型,也分屬不同的類。

所以,對于那些會用到你代碼的程序員,一以貫之的命名法簡直就是天降福音。

 

 

 10 通俗易懂

 

我們應盡力寫出易于理解的變量名,把代碼寫得讓別人能一目了然,而不必讓人去非常費力地去揣摩其含義。我們想要那種大眾化的作者盡責地寫清楚的通俗易懂的暢銷書風格,而不是那種學者學院風的晦澀論文寫作風格。

 

 11 盡情使用解決方案領域專業術語

 

記住,只有程序員才會讀你寫的代碼。所以,盡管去用那些計算機科學(Computer Science,CS)領域的專業術語、算法名、模式名、數學術語。

對于熟悉訪問者(Visitor)模式的程序來說,名稱AccountVisitor富有意義。給技術性的事物取個恰如其分的技術性名稱,通常就是最靠譜的做法。

 12 添加有意義的語境

 

很少有名稱是可以自我說明的。所以,我們需要用有良好命名的類,函數或名稱空間來放置名稱,給讀者提供語境。若沒能提供放置的地方,還可以給名稱添加前綴。

舉個栗子,假如我們有名為firstName、lastName、street、houseNumber、city、state和zipcode的變量。當他們擱一塊兒的時候,的確是構成了一個地址。不過,假如只是在某個方法中看到一個孤零零的state呢?我們會推斷這個變量是地址的一部分嗎?

我們可以添加前綴addrFirstName、addrLastName、addrState等,以此提供語境。至少,讀者可以知道這些變量是某個更大變量的一部分。當然,更好的方案是創建名為Address的類。這樣,即便是編譯器也會知道這些變量是隸屬于某個更大的概念了。

 

另外,只要短名稱足夠好,對含義的表達足夠清除,就要比長名稱更合適。添加有意義的語境甚好,別給名稱添加不必要的語境。

 

 四、小結

 

其實,取一個好名字最難的地方在于需要良好的描述技巧和共有的文化背景。與其說這是一種技術、商業或管理問題,還不如說這是一種教學問題。

不妨試試上面列出的這十二條規則與要點,看看你的代碼可讀性是否有所提升。而如果你是在維護別人的代碼,或者是在重構,效果應該會是立竿見影的。

 

 

 五、本文涉及知識點提煉整理

 

文章開頭部分已經用思維導圖的方式展現了本文的知識點,這邊再貼出一個文字列表版,方便大家整理:

要點一:要名副其實。一個好的變量、函數或類的名稱應該已經答復了所有的大問題。一個好名稱可以大概告訴你這個名稱所代表的內容,為什么會存在,做了什么事情,應該如何用等。

要點二:要避免誤導。我們應該避免留下隱藏代碼本意的錯誤線索,也應該避免使用與本意相悖的詞。

要點三:盡量做有意義的區分。盡量避免使用數字系列命名(a1、a2…….aN)和沒有意義的區分。

要點四:盡量使用讀得出來的名稱。如名稱讀不出來,討論的時候會不方便且很尷尬。

要點五:盡量使用可搜索的名稱。名稱長短應與其作用域大小相對應,若變量或常量可能在代碼中多處使用,應賦予其以便于搜索的名稱。

要點六:取名不要繞彎子。取名要直白,要直截了當,明確就是王道。

要點七:類名盡量用名詞。類名盡量用名詞或名詞短語,最好不要是動詞。

要點八:方法名盡量用動詞。方法名盡量用動詞或動詞短語。

要點九:每個概念對應一詞,并一以貫之。對于那些會用到你代碼的程序員,一以貫之的命名法簡直就是天降福音。

要點十:通俗易懂。應盡力寫出易于理解的變量名,要把代碼寫得讓別人能一目了然,而不必讓人去非常費力地去揣摩其含義。

要點十一:盡情使用解決方案領域專業術語。盡管去用那些計算機科學領域的專業術語、算法名、模式名、數學術語。

要點十二:要添加有意義的語境。需要用有良好命名的類,函數或名稱空間來放置名稱,給讀者提供語境。若沒能提供放置的地方,還可以給名稱添加前綴。

來源: http://blog.csdn.net/poem_qianmo/article/details/52144086


上一篇:things

下一篇:2016JavaScript之星

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩一区二区在线| 亚洲一区二区少妇| 精品视频在线播放免| 欧美电影在线观看网站| 成人激情电影一区二区| 97超碰蝌蚪网人人做人人爽| 丝袜情趣国产精品| 国产成人精品视频在线| 亚洲三级黄色在线观看| 国产精品极品在线| 国产欧美日韩精品专区| 色综合久久天天综线观看| 欧美xxxx14xxxxx性爽| 久久久久亚洲精品成人网小说| 热99精品只有里视频精品| 欧美午夜精品在线| 欧美中文在线观看| 中文字幕av一区二区三区谷原希美| 亚洲成色999久久网站| 国产一区在线播放| 亚洲午夜色婷婷在线| 国内精品免费午夜毛片| 久久精品亚洲94久久精品| 国产又爽又黄的激情精品视频| 在线播放国产精品| 国产精品一区二区三区久久久| 亚洲高清久久网| 成人日韩av在线| 欧洲成人免费aa| 久久乐国产精品| 国产精品18久久久久久首页狼| 久久久久中文字幕2018| 亚洲自拍欧美色图| 欧美中文字幕第一页| 日本久久亚洲电影| 欧美日本精品在线| 在线观看国产精品淫| 亚洲精品电影久久久| 亚洲美女在线看| 日韩av黄色在线观看| 91亚洲精品在线| 国产亚洲精品日韩| 久久久久久久久久久成人| 777精品视频| 亚洲女人天堂色在线7777| 一区二区中文字幕| 欧美精品videossex88| 日韩中文理论片| 91色琪琪电影亚洲精品久久| **欧美日韩vr在线| 中文字幕av一区中文字幕天堂| 亚洲色图13p| 92看片淫黄大片欧美看国产片| 国产欧美一区二区三区久久人妖| 草民午夜欧美限制a级福利片| 国产成人97精品免费看片| 亚洲尤物视频网| 26uuu日韩精品一区二区| 国产精品伦子伦免费视频| 国产精品久久久久久久久久新婚| 午夜精品蜜臀一区二区三区免费| 亚洲欧美中文日韩在线| 欧美激情国产精品| 97av在线影院| 精品亚洲va在线va天堂资源站| 97在线观看视频国产| 国产日本欧美一区| 欧美一区三区三区高中清蜜桃| 国产精品91在线观看| 欧美激情高清视频| 欧美激情免费看| 日韩h在线观看| 亚洲黄色在线看| 久久精品一本久久99精品| 精品久久久久久中文字幕一区奶水| 亚洲黄页网在线观看| 亚洲天堂2020| 欧美在线亚洲在线| 欧美成人亚洲成人日韩成人| 日韩在线观看免费全| 久久精品国产欧美激情| 尤物99国产成人精品视频| 久久久女女女女999久久| 成人免费视频97| 国产在线观看精品| 亚洲国产一区自拍| 国产精品亚发布| 高清日韩电视剧大全免费播放在线观看| 久久视频免费在线播放| 欧美视频二区36p| 自拍偷拍亚洲区| 国产亚洲一级高清| 日韩理论片久久| 国产欧美一区二区| 久久久爽爽爽美女图片| 国产精品久久婷婷六月丁香| 午夜精品一区二区三区视频免费看| 亚洲春色另类小说| 国产精品三级久久久久久电影| 美女少妇精品视频| 欧美黑人国产人伦爽爽爽| 国产成人精品在线视频| 精品久久久91| 91免费人成网站在线观看18| www国产91| 精品人伦一区二区三区蜜桃免费| 亚洲天堂av网| 色综合久久88色综合天天看泰| 伊是香蕉大人久久| 日韩欧美亚洲范冰冰与中字| 欧美成年人在线观看| 日韩黄色av网站| 中文字幕日韩高清| 欧美激情视频给我| 欧洲成人性视频| 91精品中文在线| 久久99视频精品| 亚洲欧美视频在线| 国产精品美女久久久久av超清| 日韩电影免费在线观看| 久久精品欧美视频| 欧美激情亚洲综合一区| 热久久美女精品天天吊色| 国产在线精品一区免费香蕉| 精品一区精品二区| 国产精品稀缺呦系列在线| 在线一区二区日韩| 精品视频在线播放| 日韩av电影在线免费播放| 亚洲国产一区自拍| 狠狠做深爱婷婷久久综合一区| 日韩高清人体午夜| 国产精品视频中文字幕91| 97精品伊人久久久大香线蕉| 伊人伊成久久人综合网站| 91在线高清视频| 成人性教育视频在线观看| 国产亚洲精品综合一区91| 欧美天堂在线观看| 久久久久久国产| 精品美女永久免费视频| 精品自拍视频在线观看| 亚洲国产精品久久久久秋霞蜜臀| 国产精品美女在线| 久久久久久国产| 4388成人网| 久久久免费电影| 国产精品999999| 欧美富婆性猛交| 91久热免费在线视频| 国产精品自拍偷拍| 欧美精品精品精品精品免费| 国产精品扒开腿做| 色偷偷av一区二区三区乱| 成人黄色在线播放| 欧美久久精品一级黑人c片| 欧美午夜丰满在线18影院| 久久天天躁狠狠躁老女人| 一区国产精品视频| 成人av色在线观看| 久久夜色精品国产亚洲aⅴ| 久久久久久久色| 久久精品国产96久久久香蕉| 亚洲精品久久久久久久久|