程式設計的時候最頭疼的事:命名

Sandy發表於2017-09-06

《程式設計師程式設計中的老大難問題》的投票

主要是基於最近Quora上的跟帖討論,根據大家的反響和投票結果,有一項投票遙遙領先,穩居第一。對於軟體開發人員來說,最大的難題是:如何命名(例如:給變數,類,函式和過程命名等等)。

對於這個結果,我多少有點意外,因為作為一個多年的開發人員,我不會投給這一項(我想我會投給“修改或維護別人的程式碼”)。但是真正讓我驚訝的是,看起來好像不怎麼重要的命名居然排列第一,跟期待的結果實在差太遠了。下面是投票結果的分佈圖。

該結果是來自Quora問答網站和更早的Ubuntu論壇跟帖的4500個開發者的投票。如何命名一項的選票幾乎是其它八項的投票結果的總和,哇!

的確,這些基於自我篩選的群體的投票結果是完全不科學的。但是我認為這個結果還是有一定意義的,換句話說,如何命名的確是個很棘手的問題,許多非程式設計人員可能會意識不到。
Don’t go into programming if you don’t have a good thesaurus 比較舊之前的調查,可以對比看看

“通常,如果你無法想出一個合適的名字,意味著你的設計可能有問題。你的一個方法裡是不是實現了太多的功能?或者你的類的封裝,凝聚性不夠強?”

“我的經驗是如果無法給你的類想出一個合適的名字,大多數情況都是你的類有問題:你可能不需要這個類,它有點多餘了”

“命名難也不見得是壞事兒,它可以迫使你去認真思考你的類到底想要實現什麼功能。”

命名規則幾個要點

List定義的變數應該 List 作為字尾結尾。
Map定義的變數應該 Map 作為字尾結尾。
陣列定義的變數應該 s 作為字尾結尾。
類成員變數是用 m打頭。

遵循當前語言的變數命名規則,不要不統一(inconsistently)地使用大/小寫字母。例如:userName, UserName, USER_NAME, m_userName, username, …。
以Java為例:

  • 類名使用駝峰命名法(Camel Case):VelocityResponseWriter
  • 包名使用小寫:com.company.project.ui
  • 變數使用首字母小寫的駝峰命名法(Mixed Case):studentName
  • 常量使用大寫:MAX_PARAMETER_COUNT = 100
  • 列舉類(enum class)採用駝峰命名法,列舉值(enum values)採用大寫。
  • 除了常量和列舉值以外,不要使用下劃線’_’

在同一個類不同的場景(contexts)中不要複用變數名。例如在方法、初始化方法和類中。這樣做可以提高可讀性和可維護性。

不要對不同使用目的的變數使用同一個變數名,而是賦予它們不同的名字。這同樣對保持可讀性和可維護性很重要。

變數名不要使用非ASCII字元(non-ASCII chars)。這樣做可能會在跨平臺使用時產生問題。

不要使用過長的變數名(例如50個字元)。過長的變數名會導致程式碼醜陋(ugly)和難以閱讀(hard-to-read),還可能因為字元限制在某些編譯器上存在相容性問題。

僅使用一種自然語言(natural language)來命名變數。例如,同時使用德語和英語來命名變數會導致(理解)不一致和降低可讀性。

使用有意義的方法名。方法名必須準確表達該方法的行為,在多數情況下以動詞(verb)開頭。(例如:createPasswordHash)

遵循公司的方法命名規則,在專案中堅持使用同一種方法命名方式。例如 getTxtUserName(), getLblUserName(), isStudentApproved(),否則會對可讀性造成影響,而且會令查詢/替換工具不可用。

遵循當前語言的變數命名規則,不要不統一地使用大/小寫字母。例如:getUserName, GetUserName, getusername, …。
以Java為例:

  • 方法使用首字母小寫的駝峰命名法:getStudentSchoolType
  • 方法引數使用首字母小寫的駝峰命名法:setSchoolName(String schoolName)

使用有意義的方法引數命名,這樣做可以在沒有文件的情況下儘量做到“自解釋(documentate itself)”

更多詳情可以瞭解:命名約定:zh-google-styleguide.readthedocs.io/en/latest/g…

Codelf 搜尋開原始碼幫程式設計師命名

老手應該都知道codeif了吧,新手可以收藏一下。

Codelf(變數命名神器)

支援直接搜尋中文,當你查中文的時候,Codelf 會直接查好單詞和單詞的近義詞給你,然後再搜尋Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project上的開源專案的原始碼匹配出與這些詞彙相關的變數名和函式名。Codelf 可以選擇開發語言進行搜尋,結果會把同個原始碼檔案裡匹配的變數名排在一起,如你選擇“PHP”然後搜尋“支付時間”
Codelf: unbug.github.io/codelf/



當然,你還可以直接檢視原始碼來源的倉庫Repo;直接拷貝變數名等。


微信掃描二維碼,歡迎關注我的個人公眾號:daimajiqiao
分享技術文章,程式碼技巧複製程式碼

相關文章