偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

編寫(xiě)高質(zhì)量的代碼,從命名入手

移動(dòng)開(kāi)發(fā)
筆者從事開(kāi)發(fā)多年,有這樣一種感覺(jué),查看一些開(kāi)源項(xiàng)目,如Spring、Apache Common等源碼是一件賞心悅目的事情,究其原因,無(wú)外兩點(diǎn):1)代碼質(zhì)量非常高;2)命名特別規(guī)范(這可能跟老外的英語(yǔ)水平有關(guān))。

[[146621]]

筆者從事開(kāi)發(fā)多年,有這樣一種感覺(jué),查看一些開(kāi)源項(xiàng)目,如Spring、Apache Common等源碼是一件賞心悅目的事情,究其原因,無(wú)外兩點(diǎn):1)代碼質(zhì)量非常高;2)命名特別規(guī)范(這可能跟老外的英語(yǔ)水平有關(guān))。

要寫(xiě)高質(zhì)量的代碼,不是一件容易的事,需要長(zhǎng)年累月的鍛煉,是一個(gè)量變到質(zhì)變的過(guò)程,但要寫(xiě)好命名,只需要有比較好的英語(yǔ)語(yǔ)法基礎(chǔ)和一種自我意識(shí)即可輕松達(dá)到。本博文將會(huì)結(jié)合本人的開(kāi)發(fā)經(jīng)驗(yàn),總結(jié)出若干命名規(guī)則,這些命名規(guī)則純屬個(gè)人的使用習(xí)慣,不代表是一種理想的規(guī)則,在這里列舉出來(lái),供大家交流討論。

1.切忌使用沒(méi)有任何意義的英語(yǔ)字母進(jìn)行命名

  1. for(int i=0; i<10; i++) { 
  2.        ... 
  3.    } 

這是在很多教Java基本語(yǔ)法的書(shū)上常見(jiàn)的代碼片斷,作為教學(xué)材料,這樣寫(xiě)無(wú)可厚非,但作為真正的代碼編寫(xiě),程序員必須要養(yǎng)成良好的習(xí)慣,不要使用這種沒(méi)有任何含義的命名方式,這里可以使用“index”。

2.切忌使用拼音,甚至是拼音首字母組合

  1. cishu =5// 循環(huán)的次數(shù) 
  2. zzje = 1000.00 // 轉(zhuǎn)賬金額 

筆者在做代碼檢查的時(shí)候,無(wú)數(shù)次遇到過(guò)這樣的命名,使人哭笑不得

3.要使用英文,而且要使用準(zhǔn)確的英語(yǔ),無(wú)論是拼寫(xiě)還是語(yǔ)法

  • 名詞單數(shù),必須使用單數(shù)英文,如Account、Customer。
  • 對(duì)于數(shù)組,列表等對(duì)象集合的命名,必須使用復(fù)數(shù),而且***按照英文的語(yǔ)法基礎(chǔ)知識(shí)使用準(zhǔn)確的復(fù)數(shù)形式,如 List<Account> accounts、Set<Strategy> strategies。
  • 對(duì)于boolean值的屬性,很多開(kāi)發(fā)人員習(xí)慣使用isXXX,如isClose(是否關(guān)閉),但這里有兩點(diǎn)建議:1)***不要帶“is”,因?yàn)镴avaBean的規(guī)范,為屬性生成get/set方法的時(shí)候,會(huì)用“get/set/is”,上面的例子,生成get/set方法就會(huì)變成“getIsClose/isIsClose/getIsClose”,非常別扭;2)由于boolean值通常反映“是否”,所以準(zhǔn)確的用法,應(yīng)該是是用“形容詞”,上面的例子,最終應(yīng)該被改為 closed,那么get/set方法就是“getClosed/isColsed/setClosed”,非常符合英語(yǔ)閱讀習(xí)慣。

4.方法名的命名,需要使用“動(dòng)賓結(jié)構(gòu)短語(yǔ)”或“是動(dòng)詞+表語(yǔ)結(jié)構(gòu)短語(yǔ)”

筆者曾看到過(guò)千奇百怪的方法命名,有些使用名詞,有些甚至是“名詞+動(dòng)詞”,而且,如果賓語(yǔ)是一個(gè)對(duì)象集合,還是***使用復(fù)數(shù):

  1. createOrder(Order order) //good 
  2. orderCreate(Order order) //bad 
  3. removeOrders(List<Order> orders) //good 
  4. removeOrder(List<Order> order) //bad 

5.對(duì)于常見(jiàn)的“增刪改查”方法,命名***要謹(jǐn)慎:

  • 增加:最常見(jiàn)使用create和add,但***根據(jù)英語(yǔ)的語(yǔ)義進(jìn)行區(qū)分,這有助于理解,create代表創(chuàng)建,add代表增加。比如,要?jiǎng)?chuàng)建一個(gè)Student,用createStudent要比用addStudent好,為什么?想想如果有個(gè)類叫Clazz(班級(jí),避開(kāi)Java關(guān)鍵字),現(xiàn)在要把一個(gè)Student加入到一個(gè)Clazz,Clazz很容易就定義了一個(gè) addStudent(Student student)的方法,那么就比較容易混淆。
  • 修改:常見(jiàn)的有alter、update、modify,個(gè)人覺(jué)得modify最準(zhǔn)確。
  • 查詢:對(duì)于獲取單個(gè)對(duì)象,可以用get或load,但個(gè)人建議用get,解釋請(qǐng)見(jiàn)第7點(diǎn)的說(shuō)明,對(duì)于不分條件列舉,用list,對(duì)于有條件查詢,用search(***不要用find,find在英文了強(qiáng)調(diào)結(jié)果,是“找到”的意思,你提供一個(gè)“查詢”方法,不保證輸入的條件總能“找到”結(jié)果)。
  • 刪除:常見(jiàn)的有delete和remove,但刪除建議用delete,因?yàn)閞emove有“移除”的意思,參考Clazz的例子就可以理解,從班級(jí)移除一個(gè)學(xué)生,會(huì)用removeStudent。

6.寧愿方法名冗長(zhǎng),也不要使用讓人費(fèi)解的簡(jiǎn)寫(xiě)

筆者曾經(jīng)遇到一個(gè)方法,判斷“支付賬戶是否與收款賬戶相同”,結(jié)果我看到一個(gè)這樣的命名:

  1. checkIsOrderingAccCollAccSame(...) // 很難理解,我馬上把它改為: 
  2. isOrderingAccountSameAsCollectionAccount(...) // 雖然有點(diǎn)長(zhǎng),但非常容易閱讀,而且這種情況總是出現(xiàn)得比較少。 

7.如果你在設(shè)計(jì)業(yè)務(wù)系統(tǒng),***不要使用技術(shù)化的術(shù)語(yǔ)去命名

筆者曾經(jīng)工作的公司曾經(jīng)制訂這樣的命名規(guī)則,接口必須要以“I”開(kāi)頭,數(shù)據(jù)傳輸對(duì)象必須以“DTO”作為后綴,數(shù)據(jù)訪問(wèn)對(duì)象必須以“DAO”作為后綴,領(lǐng)域?qū)ο蟊仨氁?ldquo;DO”作為后綴,我之所以不建議這種做法,是希望設(shè)計(jì)人員從一開(kāi)始就引導(dǎo)開(kāi)發(fā)人員,要從“業(yè)務(wù)”出發(fā)考慮問(wèn)題,而不要從“技術(shù)”出發(fā)。

所以,接口不需要非得以“I”開(kāi)頭,只要其實(shí)現(xiàn)類以“Impl”結(jié)尾即可(注:筆者認(rèn)為接口是與細(xì)節(jié)無(wú)關(guān)的,與技術(shù)無(wú)關(guān),但實(shí)現(xiàn)類是實(shí)現(xiàn)相關(guān)的,用技術(shù)化術(shù)語(yǔ)無(wú)可口非),而數(shù)據(jù)傳輸對(duì)象,其實(shí)無(wú)非就是保存一個(gè)對(duì)象的信息,因此可以用“**Info”,如CustomerInfo,領(lǐng)域?qū)ο蟊旧砭褪菢I(yè)務(wù)的核心,所以還是以其真實(shí)名稱出現(xiàn),比如Account、Customer,至于“DAO”,這一個(gè)詞來(lái)源于J2ee的設(shè)計(jì)模式,筆者在之前的項(xiàng)目使用“***Repository”命名,意味“***的倉(cāng)庫(kù)”,如AccountRepository.

關(guān)于“Repository”這個(gè)詞的命名,是來(lái)源于Eric Evans的《Domain-Driven Design》一書(shū)的倉(cāng)庫(kù)概念,Eric Evans對(duì)Repository的概念定義是:領(lǐng)域?qū)ο蟮母拍钚约?,個(gè)人認(rèn)為這個(gè)命名非常的貼切,它讓程序員完全從技術(shù)的思維中擺脫出來(lái),站在業(yè)務(wù)的角度思考問(wèn)題。說(shuō)到這里,可能有人會(huì)反駁:像Spring、Hibernate這些優(yōu)秀的框架,不是都在用“I”作為接口開(kāi)頭,用“DAO”來(lái)命名數(shù)據(jù)訪問(wèn)對(duì)象嗎?沒(méi)錯(cuò)!但千萬(wàn)別忽略了語(yǔ)義的上下文,Spring、Hibernate框架都是純技術(shù)框架,我這里所說(shuō)的場(chǎng)景是設(shè)計(jì)業(yè)務(wù)系統(tǒng)。

8.成員變量不要重復(fù)類的名稱

例如,很多人喜歡在Account對(duì)象的成員變量中使用accountId,accountNumber等命名,其實(shí)沒(méi)有必要,想想成員變量不會(huì)鼓孤立的存在,你引用accountId,必須是account.accountId,用account.id已經(jīng)足夠清晰了。

“勿以善小而不為,勿以惡小而為之”、“細(xì)節(jié)決定成敗”,有太多的名言告訴我們,要注重細(xì)節(jié)。一個(gè)優(yōu)秀的程序員,必須要有堅(jiān)實(shí)的基礎(chǔ),而對(duì)于命名規(guī)則這樣容易掌握的基礎(chǔ),我們何不現(xiàn)行?

責(zé)任編輯:倪明 來(lái)源: Johnny's Collections
相關(guān)推薦

2015-08-25 08:29:11

編寫(xiě)高質(zhì)量命名

2011-03-04 10:11:09

JavascriptAPI

2011-12-29 15:02:27

JavaScript

2017-07-14 09:54:47

代碼函數(shù)程序

2012-09-13 10:44:18

Python代碼

2015-07-13 10:48:44

OC代碼程序員

2023-10-31 16:22:31

代碼質(zhì)量軟件開(kāi)發(fā)Java

2010-03-01 14:31:04

Java

2024-03-07 11:39:24

HadolintDockerfile工具

2011-04-01 09:13:19

VB程序員

2022-10-24 08:10:21

SQL代碼業(yè)務(wù)

2020-09-18 07:57:10

代碼編碼開(kāi)發(fā)

2015-08-03 10:40:59

程序員代碼質(zhì)量Quora

2020-02-14 09:39:40

箭頭函數(shù)語(yǔ)法運(yùn)算符

2020-02-14 14:35:01

編程語(yǔ)言PythonJava

2011-04-07 09:18:59

MySQL語(yǔ)法

2021-01-04 08:04:51

JS 變量JavaScript

2022-06-13 23:30:27

代碼詞匯高質(zhì)量

2013-12-03 09:34:26

iOS應(yīng)用開(kāi)發(fā)實(shí)踐高質(zhì)量Objectiv

2020-09-27 09:41:04

代碼開(kāi)發(fā)注釋
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)