編程教程中的英文示例改成中文命名看看?想不到原來是這意思!_風聞
吴烜-2020-08-27 02:54
注意:文中所有中文命名的示例代碼都能正常運行,因為 Java、Scala 等等編程語言都支持中文命名標識符。
前幾天有幸看到Quora不久前的一個回覆: Has any serious project been written in a non-English-based programming language? (有沒有非英文編程語言寫的項目?)
得知西門子和愛立信內部都有使用母語命名的C/C++代碼(德語/瑞典語). 原文如下:
At both Siemens (German) and Ericsson (Swedish), I have seen programs written in C, and C++ where the only English words are the keywords. So if, new, else, for and the standard libraries like std::vector<>
Everything else was in German or Swedish.
另外, 答者還提到在布拉格碰到過一本Java編程書, 也是用非英語進行命名寫的示例代碼.
以母語命名可讀性強的優勢, 照理説編程教程應該是非常適合這一實踐的. 那麼來試試:
觀感如何? 個人覺得是非常一目瞭然, 但代碼本身自帶不少槽點,和生活現實相去甚遠。
下面看看英文原版(Effective Java第三版, Item 34的例程):
意思一樣, 但是不是看上去有了些"距離感", 槽點似乎就沒那麼明顯了, 尤其不會有太多代入感. 可以想見, 在翻譯英文原著時, 譯者對代碼本身的命名進行中文化也許會吃力卻討不到多少好.
翻了也許會有其他麻煩的還有這種(同一本書, Item 68):
還有這種(Item 4):
String s = “bikini”;
至於下面這個例子(Item 34), 問題是想翻譯都只能找到音譯詞, 也許還不如不翻. 而且, 在示例代碼裏用"桔子", “蘋果"之類在外文編程書籍中屢見不鮮, 但如果真用在中文代碼中, 似乎第一感覺就有點幼稚.
public enum Apple { FUJI, PIPPIN, GRANNY_SMITH }
public enum Orange { NAVEL, TEMPLE, BLOOD }
還有一種問題比如(Programming in Scala 第三版, 7.5節):
直譯過來是:
這幾個詞對於不大瞭解西方飲食習慣的讀者來説, 讀起來完全沒有感覺. 與其費口舌在註解裏普及西方文化, 也許改成這樣更自然:
但這比起翻譯本身來, 又多了不少工作量, 估計還很難獲得原作者的同意. 當然, 如果是自編文獻, 就沒有原作的限制了, 但就像之前的例子所示, 恐怕選材和尺度都會比用英文代碼更加敏感.
類似的, 在項目中使用中文命名也比英文命名更需要推敲. 隨手寫個奇怪的英文名看起來也許不那麼顯眼, 但用了中文, 就會非常扎眼. 所謂"文如其人”, 也許語文的實用性會隨着中文編程的推廣而逐漸迴歸.