如何給函數取個合適的名字

續集123 8年前發布 | 6K 次閱讀

來自: 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 取決于判斷主體是單個還是多個。如:isButtonEnabledareButtonsEnable

合理的使用 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協議
網絡平臺如需轉載必須與本人聯系確認。

 本文由用戶 續集123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!