如何給函數取個合適的名字
來自: http://www.jianshu.com/p/e864b4b5b8f6
對程序員來說,下面的幾個任務,哪個最難?
- 給函數,變量等命名
- 向別人解釋我們做什么(或者不做什么)
- 任務估時
- 與別人溝通
- 在別人代碼的基礎上工作
- 實現你不認同的功能
- 寫文檔
- 寫測試
- 設計解決方案
Quora 和 Ubuntu Forums thread 上的 4500 個程序員對上面的問題進行投票。49%的程序員認為給函數,變量等命名是最難的任務。
年少時,我們也曾給函數取過這樣的名字
function doSth(){}// 實在怎么起名字,先湊合叫這個吧。 function zds(){} // zds 是“做大事”的拼音縮寫。哈哈。 function doThing1AndDoTing2(){}// 做事1和事2 // 還有更多慘不忍睹的
當我們編碼漸多,越來越意識到到好的命名對我們理解代碼是多么的重要。那么,什么樣的名字算是合適的呢?我覺得,如果通過看函數名字能明確的知道函數做了什么,那就是合適的命名。上面的三個名字:
- doSth: 這函數名就是廢話。不看函數的內容,完全不知道這函數做什么。
- zds: 鬼知道zds是什么簡稱。
- doThing1AndDoTing2: 雖然我們知道是做了兩件事,但也太羅嗦了。比如,我們有一個來做肉的函數,我們這樣寫
funcion washAndFireAndWrapMeat(){ washMeat();// 洗肉 fireMeat();// 煮肉 wrapMeet();// 將肉裝盤 }
如果把這個函數改成 cookMeat 是否更好。
下面是一些命名函數的技巧。
明確函數要做什么
在給函數命名前,明確函數到底要做什么。這有利于給函數命名。
以動詞開頭
函數總是做些什么,所以當然要以動詞開頭。
盡量不要以 do 開頭
do 并不能給我們提供任何函數的信息。相比之下,search, compute, handle 之類的動詞暗示著函數大概做了什么。
返回布爾值的方法以 is 或 are 開頭
用 is 還是 are 取決于判斷主體是單個還是多個。如:isButtonEnabled
,areButtonsEnable
。
合理的使用 get 作為函數名字的開頭
所有有返回值的函數,好像都可以用 get 作為函數名字的開頭。但以 get 開頭的函數應該表示取某屬性,如
var user = { firstName: '', lastName: '', getFirstName: function(){ return this.firstName; }, getFullName: function(){ return this.firstName + this.lastName; } }
否則就不應該用 get 開頭。比如,從服務器上獲取用戶列表,這個方法可以叫 fetchUserList
,而不是 getUserList
;獲取某個范圍內的所有質數,可以叫 caculatePrime
。
不要包含上下文信息
如有個 user 對象,有個獲取 user 的 id 的函數,應該叫 getId
而不是 getUserId
。
不要包含函數參數的信息
如用一個 id 和 token 找用戶的方法,應該叫 findUser(userId, token)
而不是 findUserByUserIdAndToken(userId, token)
。如果以 findUserByUserIdAndToken
來命名,那么如果以后函數要支持用其他方式查找用戶怎么辦,又或是不支持用 token 查找怎么辦。
參考
本文遵守創作共享CC BY-NC-SA 4.0協議
網絡平臺如需轉載必須與本人聯系確認。