關於程式設計的命名藝術

命名,是程式設計領域老掉牙的議題,從變數命名到函式、物件的命名,未必有多少人將這件事做好,你真的明白為何變數命名重要嗎?  此外,除了最基本的變數名稱要有意義外,常見變數命名方式如匈牙利命名法、駝峰命名法等等,又該如何選擇呢? 這邊將簡單跟大家分享我對於變數命名的一些想法。

我想要討論的不是駝峰命名法、匈牙利命名法的優缺點,這些在維基百科或 Google 盡可找到成山的資料,我認為更重要的是為何我們需要好的變數命名,以及如何「選擇」變數命名方式。

這邊統一說變數名稱,但其實函式名稱、物件名稱也是同樣的道理。

為何變數命名很重要呢? 我認為可以分兩個面向來看,顯為人知的,糟糕的變數命名會讓程式碼的可讀性降低,雖然電腦一樣可以編譯執行,但程式碼是寫給人看的,後續要維護時別說其他人,連當初這段程式碼的作者都要花上許多時間才能理解自己寫了什麼,針對這點我個人深有體會,相信只要有幾年的實務經驗也都認同,也因此,變數命名本身需要有意義,忌諱 x1、x2、x3 這種變數名稱。

但除了變數名稱本身要有意義外,你應該也看過以下這幾種變數命名方式:

var studentList

var StudentList

var student_list

var arrStudent

var students

變數名稱要有意義,自己才能看懂,這道理人人都懂,但更進一步的,究竟要用底線還是大小寫的變數命名方式呢? 許多人會選一個喜歡的方式在不同程式語言使用,也有的人沒有特別區分,想用底線就用底線,想用大寫就用大寫,但其實命名方式這事情應該是看開發團隊、程式語言慣例來決定的!

首先談「程式語言慣例」的部分,每種程式語言都有各自的 Coding Style 文件會建議你應該如何命名,例如 Python 針對變數、常數、函式、物件、方法、屬性都有不同的要求,如果是物件則應該首字大寫、常數則全部大寫、變數則是用底線分隔單詞,最開始我覺得這很沒意義,但後來才發現「學習該程式語言慣例的風格」對於開發速度有很顯著的加快,在寫 Java 或 Python 的程式時,即使引用第三方函式庫,我也可以很快速的打出函式名稱而不用去翻文件,並非把用法背熟了,而是因為官方的、第三方的函式庫都遵守一套共同的命名慣例,所以我可以很快速地去推測函式名稱。

簡單來說,每種程式語言有各自的慣例,儘量遵守該慣例去寫程式,除了讓你的程式碼可以更容易的被其他人閱讀,也可以讓你在使用函式庫時不用一直翻文件。

所以並不是選一種方式橫跨不同語言使用哦! 事實上每種語言的慣例可能都不同。

接著談「開發團隊」的部分,在團隊裡面,也許有人習慣用底線的變數命名方式,有人習慣用大小寫的駝峰式命名法,但既然在一個開發團隊裡,要合作寫同一個程式,就應該要規定「團隊專屬」的命名方式,避免一份程式碼裡面充斥不同風格的變數名稱,這一部分是因為程式碼潔癖,在一份檔案裡看到兩種風格的變數名稱對我而言十分沒有邏輯,同樣是函數名稱為何有的用底線、有的用大寫,到底是什麼邏輯呀!!和「程式語言慣例」相呼應的,試想今天團隊沒有統一命名風格,你在使用函式時還要先去翻一下對方的檔案,確認到底是用底線還是其他的,不覺得很麻煩嗎?

同樣簡單總結,如果和別人合作寫程式,要定義出團隊專屬的命名風格(並儘量兼顧語言慣例),忌諱每個人都用各自習慣的風格,否則程式碼風格各異就算了,你只是要呼叫函式,還需要去翻對方的程式碼,十分浪費時間!

其實在團隊合作的情況下,會儘量規範一份團隊專屬的 Coding Style,例如要用空白還是Tab 、要用兩格還是四格等等,我曾看過兩格空白和四格 Tab 併用的程式碼,不得不說十分痛苦……

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料