給程式碼起個好名字
1,用英文,別用中文,別用拼音,更加別用拼音縮寫
這應該是老生常談了。 C#/Java語言挺神奇,可以用中文做識別符號,比如你建立一個類,叫“貨物訂單”,完全沒問題,但有人嘗試過之後就很快放棄了,因為可讀性實在太差了,另外在做程式碼搜尋的時候,輸入中文字身就比英文要慢,英文還方便用正則等去匹配,中文在這方面操作起來就比較困難,如果你還想把程式碼移植到別的語言去,就更加不能用中文了。 拼音也別用,因為拼音你不念出來的話你往往不知道它想表達什麼意思,漢語拼音中還有聲調,而程式碼中又表示不了,有時候真能讓閱讀者一臉懵逼。 那拼音縮寫就更加不用說了,我維護過一些老古董程式碼就全是拼音縮寫,噁心+崩潰。好 | 不好 | 不好 | 垃圾 |
GoodsOrder | 商品訂單 | ShangPinDingDan | Spdd |
InventoryCheck | 庫存檔點 | KuCunPanDian | kcpd |
InvoiceManagement | 發運單管理 | FaYunDanGuanLi | fydgl |
RouteConfiguration | 路由配置 | LuYouPeiZhi | lypz |
2,不要拼寫錯誤
這不是廢話麼?但也不知道是由於不小心還是英文水平太差,我遇到的程式碼中的拼寫錯誤實在太多太多了,更有甚者把公司的名稱都寫錯的。如果你哪天用微軟的程式碼,發現名稱空間是:Micorsoft.Extensions.Logging,你會有什麼感受? 寫程式碼和做別的事情一樣,也需要用心,遇到不確定的東西時,查一下,問一下,如發現自己之前的問題,要及時修正。 隨便列舉一些拼寫錯誤(跟技術無關,純粹看英語水平和仔細程度)錯誤 | 正確 | 描述 |
lable | label | 字母前後寫錯是常發生的事情 |
catched | caught | catch的過去分詞為不規則 |
loging | logging | 注意新增-ing的特例 |
IsEnable | IsEnabled | Enabled才是形容詞,才能用系動詞 |
登陸 | 登入 | 你以為中文的錯別字就少了? |
SingleBox | PackingList | 本公司的梗,“發票箱單”,某同事翻譯成了Single(單)Box(箱),奇葩 |
3,用名詞充當類名
類,通常表示一個數據實體,或者一系列資料與方法的封裝,大多時候是應當使用名詞的。下面是一些例子:名稱 | 不太好 | 不錯 |
登入資訊 | Login(這是動詞唉) | LoginReq(Req表示Request,一看就知道這是個登入請求) 或LoginUi,字尾Ui表示UI層使用的類。 |
出庫訂單 | Order(太普遍了,且order是SQL的關鍵字,容易帶來一些不便) | OutBoundOrder |
全域性變數 | Global(這是形容詞) | GlobalData,GlobalAppConfig等 |
匯流排請求類 | BusRequest(這是動詞) | BusRequester(請求者,湊合,但仍不太好) BusReqManager(這個名字明顯更好) |
4,不要使用太普遍的名詞充當類名
如Configuration,這個詞表示配置,你打算建立這麼一個類表示系統的配置資訊,並提供相應方法。但你要注意了,一個較大的系統裡通常有很多很多的配置,比如程式的全域性配置,入庫規則配置,出庫規則配置,外部介面訪問配置,日誌配置……如果你全都叫Configuration,你很可能三天兩頭被自己搞懵。那怎麼辦?寫具體點不就行了麼?不好 | 好一點 | 說明 |
Configuration | GlobalApplicationConfiguration InBoundConfiguration ExteralApiConfiguration LoggingConfiguration | 起碼更具體了 |
Param (某個外部API的引數) | GenericExternalApiParam | 識別符號命名沒必要再從技術上描述它是什麼東西,正如你不需要寫完“int i=1”後加個註釋“定義整型變數i並賦值1”,要使得名字符合業務邏輯 |
5,適當的簡寫與約定俗成的縮寫
上面起的名字你是不是覺得太長了?那可不可以縮寫一些?那是肯定的,程式碼中,我們存在著很多約定俗成的“單詞”,舉個最簡單的例子:ID,ID是Identity的簡寫,為什麼我們現在都知道?因為已經“約定俗成”了,這種例子還很多,我隨便舉一些:原本 | 簡寫 |
participant | ptcp |
application | app |
description | desc |
abbreviation | abbr |
configuration | config或cfg |
Machintosh | Mac |
6,約定俗成的縮寫
英文中的縮寫實在太多了,如果沒有這些縮寫,用英語就簡直無法交流,我並不誇張,隨便寫幾個縮寫的例子:英文縮寫 | 英文全稱 | 中文 |
NASA | National Aeronautics and Space Administration | 美國國家航空和宇宙航行局 |
BASIC | Beginner's All-purpose Symbolic Instruction Code | 初學者通用符號指令程式碼 |
EPROM | Electrically Programmable Read-Only-Memory | 電可程式設計序只讀儲存器 |
JSON | JavaScript Object Notation | JavaScript物件表示式 |
ASN | Advanced Shipment Notice | 預到貨通知單 |
DN | Delivery Number | 運單號 |
7,駝峰命名法
先問這麼一個問題:UserID好,還是UserId好? 也許你有你的看法,而我的看法很明確:UserId好,因為它很好地區分出了ID這個“單詞”,前面說了ID是Identity的簡寫,但認可的人多了之後,ID本身就成為了一個單詞,根據駝峰命名法的規則,單詞首字母大寫,其餘小寫,因此應當寫UserId,可能一開始感覺有點不習慣,但後面很快就能適應。 另外還有一個問題:UserName好,還是Username好? 按規則應該是Username,因為這本身就是一個單詞,但由於歷史原因,在我的專案裡面,一律寫成UserName,以前寫錯了,慣性太大,改不了,就當是User和Name兩個單詞拼成的吧——看吧,兵無常勢水無常形,要靈活應變。 另外還要注意一點,用駝峰命名法的時候,避免連續出現大寫字母,否則很影響程式碼可讀性。8,適當使用字尾區分
有時候實在不知道怎麼起名字,如登入,叫“Login”,這個也許表示客戶端向伺服器提交的登入請求,但也能表示伺服器處理好登入請求後返回給客戶端的資訊, 怎麼辦? 我的辦法是加上字尾作區分:登入 | 登入請求 | 登入響應 |
Login | LoginReq | LoginResp |
員工資訊 | UI層的員工資訊 | 業務邏輯層的員工資訊 |
EmployeeInfo | EmployeeInfoUi | EmployeeInfoBl 或 EmployeeInfo |
9,用謂賓結構來命名方法
方法表示某個執行動作,通常都是謂賓結構,為什麼把主語省掉了?因為主語100%是呼叫者,根本不用問。這是一些例子:方法 | 好 |
報關單作廢 | CancelDeclaration |
檢驗是否存在 | CheckIfExisting |
出庫確認 | ConfirmOrder |
刪除核放單 | DeleteGatebill |
動詞 | 英文 |
建立 | Create |
增加 | Add(注意跟“建立”語義上的差異) |
更新/編輯 | Update/Edit |
刪除/移除 | Delete/Remove |
清空 | Clear/RemoveAll |
獲取/設定 | Get/Set |
傳送/接受 | Send/Receive |
檢查是否XXX | CheckIf |
生成 | Generate |
計算 | Calculate |
上傳/下載 | Upload/Download |
萬能動詞 | Do/Make |
10,複數與列表
有次我複查程式碼,看到一個“訂單”中的“訂單明細”是這麼命名的:OrderLineCounts。莫名其妙,這根本不通啊。 用“Line”表示明細是我們公司的約定俗成,一個訂單主檔中帶若干訂單明細,我說用來表示這種明細列表通常有兩種方法,一種是用複數,另一種加個List字尾:不通 | 通 | 通 |
OrderLineCounts | OrderLines | OrderLineList |
最後
講一個東西,叫“破窗效應”(Broken Window Theory),我是許多年前在《程式設計師修煉之道》這本書上看到的(這本書強烈推薦一下),這個道理很簡單,就是說如果你一開始對系統中出現的破敗視而不見的話,更多的破敗就會出現,直到事態不可挽回。你對程式碼的命名不認真,馬馬虎虎,導致同事看不懂,同事誤會了你的意思,跟著你亂命名,你再次接手這程式碼的時候,已經凌亂不堪,你感覺已經很難維護,於是更加得過且過,直到程式沒人再敢去碰。 “宇宙的熵在升高,有序度在降低,像平衡鵬那無邊無際的黑翅膀,向存在的一切壓下來,壓下來。可是低熵體不一樣,低熵體的熵還在降低,有序度還在上升,像漆黑海面上升起的磷火,這就是意義,最高層的意義,比樂趣的意義層次要高。”——《三體:死神永生》相關推薦
給程式碼起個好名字
在公司裡,我有個不怎麼常用的綽號,叫“算命先生”——幫別人起名字的,準確說,幫別人的程式碼起名字,包括專案名,目錄名,類名,屬性名,方法名,變數名等。事實上,我也確確實實幫過別人起名字,起名字總歸有些套路,要避開一些坑,一個好的名字就是一個成功的開始,反之可能後面會帶來很多困擾。我跟同事說,好的名字讓你行走江
寫給所有程式設計師_起個好名字是成功的一半
時隔我做程式設計師兩年了,現在才意識到為檔案,為變數,為函式起個好名字的重要,我倍感慚愧,但又為現在意識到這點感到幸運。 1.沒意義的名字 例子: int a = 1; int b = 2; int c = a + b; System.out.prin
外貿B2C系列:如何給自己起個英文名字?
對外貿B2C來說,在facebook、youtube或twitter上做營銷是必須的,那麼起個好聽英文名稱就至關重要。 1.如何取英文名字找一個與華文名字音相近的英文名字,例如名字裡有「萱」的人,就可以找sh開頭的名字,如Sharon、Shari、Shanna等。
如何為你的APP起一個好名字?
部分 關於 組成 不但 post 分析 分享 重要性 有一個 一個新APP誕生,想要未來有一個好的知名度,獲取大量用戶的話,名字是極為重要的事情之一,就像品牌名一樣,一個名字的好壞有時候在一些關鍵時刻就為成與敗埋下了種子。 APP有一個好名字的重要性,我想大家眾
數碼相機的充電器太麻煩了?給你推薦個好物
近年來,邁進攝影這道大 門 的朋友是越來越多了,不論是專業攝影還是當做一種興趣愛好,攝影都成了人們的最佳選擇。要想攝影出好的作品,單靠手機或者卡片機是遠遠不夠的,人們一般都會選擇數碼相機或者是單反相機,而單反相機常用的充電模式有時候不能滿足數碼或單反相機的使用,行動式電器則有效地解決了這一大問題,為
編碼之道:取個好名字很重要
程式碼就是程式設計師的孩子,給“孩子”取個好聽的名字很重要! 我們在專案開發中,接觸到的變數、函式、類多數都是專案自己定義的,往往都是為了解決一些特定的領域的問題,引入了各種各樣的概念,程式碼裡面的名字就對應著問題領域或方案領域的這些概念,所以,對於一個命名良好,程式碼規範,設計簡潔的系統,要想
軟體設計的哲學:第十四章 選個好名字
目錄 14.1例子:不好的名字會導致錯誤 14.2 創造一個形象 14.3 名字要準確 14.4保持一致性 14.5 不同的觀點:Go style guide 14.6 結論
如何給目錄起兩個名字?
windows xp系統下,有的軟體安裝後,會出現中文名稱目錄,或者帶空格名稱的目錄,不方便在指令碼/命令列中使用這些名稱, 又不能改變這個名稱,例如:gdriver安裝後,會在“文件”目錄下,出現"Google 雲端硬碟"這個目錄,這個目錄的名稱是不能更改的。 有一個方
微創新 你會給APP起名字嗎
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
給大家介紹兩個好用的C語言編輯器
注意到很多小夥伴經常反饋在學習C語言時該選擇什麼 C語言 編輯器好呢?都說慾善其事必先利其器,網路上也有很多不同型別的編輯器,讓人很難進行抉擇!C語言 編輯器選擇哪個好? 所以我今天根據我個人的使用情況,整理了幾款C語言編輯器分享給大家,需要的看官看下文了解一下喲~ (小編推薦一個學C語
[jdbctemplate+POSTGRESQL+儲存過程]jdbc呼叫儲存過程順便勘誤同時給出幾個較好的配合方式
前言 首先採用jdbc呼叫儲存過程是因為,整合mybatis的話,對於以儲存過程為主的系統沒有多大的幫助,反而多了一個分層。 本文將給出常見的儲存過程呼叫方式。 閱讀前可以先參考一下: 關於postgresql的多結果集,或者遊標返回儲存過程請檢視上篇文章: 【
可惡的室友發個zip加密檔案給我!還好我會Python,種子還是要看
我叫室友發幾個種子給我看看!好不容易答應我了,然後發了一個加密檔案給我,這我就很煩了!只好用Python寫一個破解教程咯! 加群:960410445 即可獲取數十套PDF! import zipfile from threading import Thread de
用Python給你的程式碼上個進度條吧 | 【程式碼也要面子的】
微信公眾號:AI演算法與影象處理如果你覺得對你有幫助,歡迎關注、轉發以及點贊哦~( ̄▽ ̄~)~ 前言 最近在跑一些程式碼的時候,很煩。。。因為有時候不知道這段程式什麼時候能執行完,現在執行哪裡了,如果報錯或者二進入死迴圈,那不是非常的浪費時間。因此,我在想到底該怎麼辦才能知道這些,就開始找,原來
開個新欄目,起個恬淡的名字
開個新專欄吧。 又回來了。 這裡,還是留有太多的記憶。 十年的人生有此干涉。 十年,未曾感知到一個時代的開始。 十年,淡然目送一個時代的終結。 已是卅歲,一半甲子,人生翻頁。 俱往矣。螢幕前,腦海中,
用Python給你的程式碼上個進度條吧,程式碼也要面子的!
最近在跑一些程式碼的時候,很煩。。。 因為有時候不知道這段程式什麼時候能執行完,現在執行哪裡了,如果報錯或者二進入死迴圈,那不是非常的浪費時間。 因此,我在想到底該怎麼辦才能知道這些,就開始找,原來可以直接加入一個——進度條,發現有些程式碼
css3 奇技淫巧 - 如何給小汽車換個背景色談起
進階 真的是 poi cdp keyword 詳解 圖片轉換 select 工具 css3 的魅力,不容小覷。曾經被她折服,再度回首,依舊拜倒在她的石榴裙下。相信在未來,她仍然魅力依舊。 站在巨人的肩上學習,不斷提升自身實力。 用 CSS 和顏色選擇工具更改圖片中的顏
@Java Web 程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼
一、前言 這篇算是類載入器的實戰第五篇,前面幾篇在這裡,後續會持續寫這方面的一些東西。 實戰分析Tomcat的類載入器結構(使用Eclipse MAT驗證) 還是Tomcat,關於類載入器的趣味實驗 了不得,我可能發現了Jar 包衝突的祕密 重寫類載入器,實現簡單的熱
@Spring Boot程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼
# 前言 這篇其實是對一年前的一篇文章的補坑。 [@Java Web 程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼](https://www.cnblogs.com/grey-wolf/p/11051427.html) 當時,就是在spring mvc應
寫程式碼有這16個好習慣,可以減少80%非業務的bug
前言 每一個好習慣都是一筆財富,本文整理了寫程式碼的16個好習慣,每個都很經典,養成這些習慣,可以規避多數非業務的bug!希望對大家有幫助哈,謝謝閱讀,加油哦~ github地址,感謝每顆star ❝ https://github.com/whx123/JavaHome ❞ 公眾號:「撿田螺的小男孩」 1.
[2017.06.08] 給自己定下個目標把
ring 設計 現在 需要 由於 oracl 自己 6.0 聯網 需要拼搏,感覺自己是那種屬於很懶散的性格的人。 在這個社會還是不能安於現狀。 現在給自己定下個目標,在期末之前盡力去做去完成這幾個目標。 由於目標是考研,所以在這個月之內, 英語要背單詞,看句子,做閱讀。 數