1. 程式人生 > >在程式碼中進行中文命名(類/變數/方法等)的優勢

在程式碼中進行中文命名(類/變數/方法等)的優勢

最初的專欄文章對在程式碼中使用中文命名的質疑與迴應是對一些常見質疑的批駁, 至今未見更有理的反面聲音. 鑑於最近看到一些對中文命名進行負面暗示各種帶節奏的網文(見最近一波對中文程式設計(包括中文命名)的攻勢), 實在難以置之不理.

此文嘗試小結一些比起英文命名更方便之處. 注意這是在明確的母語優勢(對在程式碼中使用中文命名的質疑與迴應"沒有好處"一節)基礎上額外的優勢:

一. 不需要駝峰命名法或者下劃線分隔

之前看到過有人問"中文命名怎麼用駝峰命名法?". 答案是, 不用, 因為根本就不需要. 原因很簡單, 中文語言本身就不用空格分隔. 帶來的好處是, 中文命名和中文自然語言更加接近. 比較如下:

英文變數名: “weaponOfMonkeyKing” 或者 “weapon_of_monkey_king”

對應自然語言: “weapon of the Monkey King”

中文變數名: “孫悟空的武器” 對應自然語言完全相同

二. 單字變數視覺混淆更少

Python創始人親自編寫的Python命名規範PEP 8 – Style Guide for Python Code就直接指出需要避免使用單字母的’l’, ‘O’, ‘I’(猜猜第一個還是第三個是大寫i?)進行命名:

Never use the characters ‘l’ (lowercase letter el), ‘O’ (uppercase letter oh), or ‘I’ (uppercase letter eye) as single character variable names.
In some fonts, these characters are indistinguishable from the numerals one and zero. When tempted to use ‘l’, use ‘L’ instead.

另外還有i, j在兩層迴圈中容易混淆等等, 而中文單字(如’甲’, ‘乙’, ‘丙’, '丁’等等)沒有這樣的問題

三. 中文單複數模糊性更符合語義

摘自中英文程式碼對比系列之Java一例:

flaggedCells是個List, 它用複數命名的意思是”可能包含多個格”. 而實際上這個變數可能只包含一個格. 中文中的名詞不分單複數, 正好符合”這個變數有可能含有單個或多個元素”這個語義. 因此命名為被標的格感覺可行. 假如語義需要強調有多個(不可能只有單個或沒有), 可以考慮加上修飾如多個字首等等.

四. 單字命名有更多選擇, 也更可讀

承蒙評論中指出, 單字命名在英文命名中確實常見.

Is the use of one-letter variables encouraged?總結的比較全面, 還加了不少雙字母的.

由於英文字母總共26個, 加上大寫也很有限. 以至於有些字母有幾種用法, 比如k: 1) 在迴圈中表示變數 2) 在表中表示鍵. 而單字中文的選擇就多的多了. 比如(肯定有更合適的, 待集思廣益): index-位/索/引, file-檔, key-鍵(迴圈變數用’甲乙丙丁’之類, 就不會有上面的k的兩種用法問題), value-值. 而這些中文單字比起對應的英文字母來, 明顯更可讀. 比較: i-位/索/引, f-檔, k-鍵, v-值

歡迎補充.