編程中如何給變數命名?有哪些規範的做法值得學習借鑒?
你是怎麼給變數命名的?結合自己使用的語言簡述一下。
去這搜CODELFps. @neal ho
以C#變數為例 修飾和大小寫
- 類型名或一切公開的:PascalCasing
- 私有或局部的:camelCasing
- 類的私有欄位:_camelCasing
- 參數:camelCasing
- 私有的且靜態的:s_camelCasing
- 數據類型:
- 名詞(Name,Count)
- 布爾類型(包括方法):
- 互斥形容詞中肯定的那個(Visible/Invisible,Enabled/Disabled)
- 或Is+形容詞(IsRunning,IsReadOnly)
- 表狀態形容詞(Done,Found)
- 數據集合類型:
- 名詞複數(Items,Bytes)
- 方法:
- 動詞或動詞短語(Start(),DoWork())
- 返回對象,或返回基本類型但暗示複雜度較高的,Get+名詞(GetEnumerator(),GetBytes())
- 事件:
- 一般事件,以表狀態形容詞結尾(DataReady,FileOK)
- 表示事件發生前觸發,現在分詞(Closing)
- 表示事件發生後觸發,過去分詞(Closed)
- 考慮使用對仗詞:
- Begin/End
- Next/Previous
- Start/Stop
- 不要使用縮寫,除非作用域很小(msg,buf)
- 考慮使用縮寫前綴(dstBuffer,srcString)
- 兩個字母的縮寫要麼都大寫,要麼都小寫(ID/id,UI/ui)
- 三個或以上字母的縮寫採用PascalCasing或camelCasing(Html/html,Xml/xml)
- 在一個代碼塊中,變數作用域越大,命名應該越長越精確。相應的,變數名越短,就應該保持變數的作用域越小。
- 不應該僅以大小寫區分變數,有些語言不區分大小寫。
- 對64位平台版本變數名使用64後綴。(PagedMemorySize64)
- 在相關的代碼中保持命名風格的一致。
駱駝命名或者下劃線
比如class BaseDispatcher(object): ... ...an_apple = None
另外可以看看python的pep8http://www.python.org/dev/peps/pep-0008/搜索 Descriptive: Naming Styles 這段買本百年孤獨(逃
不說那麼多複雜的。我現在習慣按這個變數的意思英文命名單詞首字母大寫。如果是臨時變數不重要的變數什麼的就小寫,命名也隨意一點比如a,tmp什麼的。
語言:R,Python。
C/C++ 的話,臨時的還是首字母大寫除了i啊x啊什麼的參數之類的。畢竟得編譯code會留下來還是寫好看點。https://a-nickels-worth.blogspot.com.au/2016/04/a-guide-to-naming-variables.htmlhttp://journal.stuffwithstuff.com/2016/06/16/long-names-are-long/
不管那種命名方法, 最重要的是一致性. 確保你所有的代碼遵循統一的命名標準, 而且不光是命名, 還有indentation, header, 很多很多. 最好的例子是開源的項目, 大部分OpenSource項目都有詳細的coding standard, 比如WebKit.
涉及到具體語言, 我們公司95%代碼是C/C++/Obj-C/C#, 所以現在主要遵循Google Style Guide. 可以在這裡查到:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
非常完善和詳盡的例子, 當然, 我們根據自己的需求進行了適當修改, 不過可以說是現在最好的standard之一.單字母,拼音縮寫,英文縮寫,已有的變數後面續一個字母或者數字
只要在第一次出現的地方加個注釋就好了,反正matlab自帶尋找所有出現之處的功能
既然你問到這個問題,那麼有一本大書可以買來看了——《代碼大全》,一個對自己代碼負責任的程序員都會買這本書的。
寫C++習慣用下劃線寫C#一般用駝峰命名法
推薦看下《代碼大全》
我估計我的做法不是很好,有時候為了防止重複命名的事情,我會用一些很詭異的之後我明白是做什麼的名字。。。。結果後來我就忘了。。。
(假設母語是中文)在技術上能用中文命名並且時間允許的情況下, 盡量用中文命名. 這不僅適用於變數, 更適用於API(詳見用中文命名API的意義和途徑).
理由詳見對在代碼中使用中文命名的質疑與回應一文, 尤其是"沒有好處"一節.
強調"時間允許"是由於在個人的實踐中, 中文命名在選取命名時往往時間略長. 原因並不是因為挑個中文名比英文難, 而是一旦命名不大恰當, 就看著特別刺眼. 正如寫文章時的用詞推敲, 找到最合適的詞必然耗時耗力. 如果只是最低要求的起名(比如只是自己兩天之內看得明白), 個人感覺中文命名比英文命名更容易和省時, 拼寫錯誤也更少.
技術上, 大多數語言已經支持中文命名, 詳見:
在各種編程語言中使用中文命名
一個實用的用中文(台灣方言)命名的自然語言處理項目:
sih4sing5hong5/tai5-uan5_gian5-gi2_kang1-ku7
中文命名的風格由於公開實踐的缺乏, 還沒有形成行業規範, 下面是一些個人的嘗試和總結:
中英文代碼對比系列之Java一例
program-in-chinese/java_in_hours_chn"命名"一節
現有框架/工具對中文命名的支持或多或少, 一些嘗試和示例詳見專欄文章:
中文代碼示例之Vuejs入門教程(一)
中文代碼示例之Angular入門教程嘗試
中文命名實踐的阻力和應對
中文代碼示例之Vuejs入門教程(一)問題後續
中文代碼示例之Spring Boot 1.3.3演示
在線編程網站對中文代碼的支持
中文命名的另一個意義是, 它可以為新的中文編程語言的語法設計提供素材, 積累經驗. 詳見:
中文編程興起的必然性
變數命名規範太多,而且都各有優缺點,所以要根據實際情況去約定, 一般要注意幾個問題: 1:在盡量兼顧團隊成員個人習慣的前提下,使整個團隊更好的接受 2:考慮到新成員進入時的理解問題 3:考慮到語言特性的問題
4:寧長不短(硬碟不值錢)
5:做約定時盡量寬約束,但要code review或者團隊經常一起互相討論以提高默契google編碼規範。
簡明 Python 編程規範,http://shisc.org/viewthread.php?tid=944Google 編碼規範指南,http://shisc.org/viewthread.php?tid=924
命名規範就跟LOL中補兵方法一樣,看似優雅,卻不重要
推薦書籍:代碼整潔之道(雖然是針對java,但仍值得一讀)。
今天看同事改代碼,瞟了一眼發現很熟,那個頁面我以前改過,有個變數名 filterText,然後同事擴展功能,於是寫了個變數名 filterText1
所以你覺得取變數名很難嗎?推薦閱讀:
※在函數中需要用到大量參數時如何傳參可以更簡潔合理?
※在寫代碼時,你們對變數的命名都是按照什麼規則,如何使變數名變成別人一看就懂的?
※當開發同事辭職,接手到垃圾代碼怎麼辦?
※工程師應該如何保證代碼質量?