天天看點

代碼整潔之道—變量名

軟體中随處可見命名,我們給變量,函數,參數,類,包。給源代碼及源代碼目錄命名,給jar檔案,war檔案,ear檔案命名,我們命名,命名,不斷命名。既然有這麼多命名,那麼我們就有必要做好它。

選個好名字要花時間,但是節省下來的時間比花掉的多。注意,一旦有好的命名,就要替換掉原本舊的名稱。認真對待每個變量名,你當用自己第一個孩子般的謹慎給變量命名。

給變量命名是開發的基礎,看起來是小事,然成敗在于細節之中,不要忽視它的重要性。

基本的命名法則

  • 不要定義一些與系統名稱相沖突的變量名,比如定義資料庫的order字段會報錯。
  • 不要定義太長的變量名,比如

    XYZControllerForEfficientHandingOfStrings

    XYZControllerForEfficientStorageOfStrings

    區分起來的麻煩
  • 類名一般是名詞,方法名一般是動詞
  • 避免留下掩蓋代碼本意的錯誤線索,避免使用與本意相悖的詞。
  • 盡量見名知意

做有意義的區分

廢話是一種沒意義的區分,假設你有一個Product類,如果還有一個ProductData和ProductInfo類,它們的名稱雖然有差別,但是意思卻無差別,info和data就像a,an和the一樣,是意義含混的 廢話。

如果缺少明确約定,變量moneyAmount就與money沒差別,cusomerInfo與customer沒差別,accountData與account沒差別,theMessage與message沒差別,要區分名稱,就要以讀者能鑒别不同之處的地方區分。

每個概念對應一個詞

比如fetch,get,retrieve代表的都是獲得的意思,但是如果在表達獲得的時候三者混着使用,在目前檔案的獲得使用的是get,下個檔案獲得使用的是fetch,這樣就容易造成混淆。

假設其餘人看到你的程式,若同一個概念你使用的是同一個詞,那麼對自己對他人都是一種幫助。

避免思維映射

不要讓讀你代碼的人把你所命名的變量在頭腦中轉換為另外一種概念。

單字母變量就是個問題,在作用域小,也沒有名稱沖突時,循環計數器,自然有可能被命名為i,j,k,這是因為傳統上慣用單字母名稱做循環計數器。

然而在多數情況下,單字母名稱不是個好的選擇,讀的人必須要把它在腦中轉換為真實的概念。

在你使用單字母做為變量的時候,在搜尋這個名稱的時候就出現了問題, 太多單詞都會包含你所定義變量名的字母。

普通聰明程式員和專業程式員的差別在于,專業程式員了解到,明确才是王道

語境

添加有意義的語境,不要添加沒有意義的語境。

設想你有名為firstName、lasiName、street、houseNu田ber、city·state和zipcode的變量。當它們在一塊兒的時候,很明确是構成了一個位址。不過,如果隻是在某個方法中看見孤零零一個state變量昵?你會理所當然推斷那是某個位址的一部分嗎?

可以添加字首addrFirstName、addrLastName、addrstate等,以此提供語境。至少,讀者會明白這些變量是某個更大結構的一部分。當然,更好的方案是建立名為Address的類。這樣,即便是編譯器也會知道這些變量隸屬某個更大的概念了。

所謂不要添加無意義的語境,當你的名字也許短小,但是足夠清楚的表達你想表達的意思的時候,就無需添加額外的語境。

Address是個好名稱,不過若與Mac位址,端口位址,Web位址差別,可以考慮使用PostalAdress,MAC,URI來差別,因為大家雖代表的是位址,但意思上還是有差別的。

最後

這裡沒有展示案例,純理論看起來了解起來相對費力一些,建議購買《代碼整潔之道》

讓自己的代碼更好,通往程式設計大神之路。