日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java中英对比_2017-11-09 中英文代码对比系列之Java一例

發(fā)布時間:2024/10/8 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中英对比_2017-11-09 中英文代码对比系列之Java一例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個系列將對同一段代碼進(jìn)行中文命名和英文命名兩個版本的比較. 目的包括, 演示中文命名, 發(fā)現(xiàn)命名時可能遇到的問題, 探討代碼風(fēng)格(中文命名的’套路’)等. 示例中的命名風(fēng)格僅基于個人非常有限的實踐, 希望拋磚引玉.

不在討論范圍內(nèi)的是:

中英文代碼的可讀性孰高孰低. 個人相信用英文和中文都能寫出可讀性很好的代碼. 區(qū)別僅在于母語不同的開發(fā)者對哪個版本更敏感, 讀寫維護(hù)起來更省工.

原代碼本身的優(yōu)化/風(fēng)格問題. 如果認(rèn)為有更有代表性的代碼, 請不吝推薦.

代碼輸入的便捷性. 前作對在代碼中使用中文命名的質(zhì)疑與回應(yīng)‘中文輸入太慢, 降低開發(fā)效率’一節(jié)中有所涉及, 打算另開題探討.

下面一段代碼選自Clean Code: A Handbook of Agile Software Craftsmanship一書, 19頁. 已經(jīng)經(jīng)過了作者的命名改進(jìn). 由于本人也沒有看過全書, 如果此段代碼在此書之后某節(jié)仍有命名改進(jìn), 請麻煩指出.

public List getFlaggedCells() {

List flaggedCells = new ArrayList();

for (Cell cell : gameBoard)

if (cell.isFlagged())

flaggedCells.add(cell);

return flaggedCells;

}

中文命名版:

public List 取被標(biāo)的格() {

List 被標(biāo)的格 = new ArrayList();

for (格類 某格 : 雷區(qū))

if (某格.是被標(biāo)的())

被標(biāo)的格.add(某格);

return 被標(biāo)的格;

}

這里觸及了幾處典型的中文命名問題. 首先, 是沒有大小寫區(qū)分類和變量名(Cell cell). 個人采用的是在類名中使用后綴’類’. 暫時沒有發(fā)現(xiàn)有類名本身就用’類’結(jié)尾的情況(那樣會出現(xiàn)XXX類類的命名), 即使如此, 應(yīng)該可以用改為類型結(jié)尾來規(guī)避(就成為XXX類型類). 變量名也與類名有一致之處, 就是所有關(guān)于格類的變量都用xx格命名, 與英文命名方法相同.

下面, 是單復(fù)數(shù)的區(qū)別. flaggedCells是個List, 它用復(fù)數(shù)命名的意思是”可能包含多個格”. 而實際上這個變量可能只包含一個格. 中文中的名詞不分單復(fù)數(shù), 正好符合”這個變量有可能含有單個或多個元素”這個語義. 因此命名為被標(biāo)的格感覺可行. 假如語義需要強調(diào)有多個(不可能只有單個或沒有), 可以考慮加上修飾如多個前綴等等.

相比之下, 如何在for循環(huán)中表示單數(shù)有些麻煩. 這個for循環(huán)的語義大概是:for one/each cell in the gameboard, if the cell is flagged, add the cell to..., 原代碼中沒對one/each cell和the cell作出區(qū)分. 對應(yīng)中文大約是對于雷區(qū)中的每一格, 如果這一格是被標(biāo)的, 就把這一格加到.... 同樣也很難在代碼中用一個詞體現(xiàn)每一格和這一格這兩個有差別的語義. 另外可能的命名有一格, 每格, 此格, 在不需突出單數(shù)的情況下直接用格等等.

get前綴的方法名, 中文采用了對應(yīng)的取, 用動詞短語可以和變量名區(qū)分, 這和英文命名類似. 有個潛在的技術(shù)問題, 就是Bean中g(shù)et的特殊規(guī)則. 個人認(rèn)為在這種情況下可以采用混用, 即get被標(biāo)的格. 這個Spring Boot的演示程序中就是如此.

is前綴的方法名, 一般認(rèn)為是返回布爾值的方法. 這里采用的命名是被標(biāo)的是個很直白的對應(yīng)命名. 既保留了是作為表示返回布爾值, 也保留了被動語態(tài). 個人覺得稍顯累贅, 但與其他命名一致(取’被標(biāo)的’格, ‘被標(biāo)的’格), 并且易于使用在其他情況, 比如isRunning->是運行中的, isTerriblyDamaged->是被嚴(yán)重?fù)p壞的等等. 不失為一種可行的風(fēng)格. 這里原本使用了是被標(biāo)記的, 但感覺去掉一字也可以接受.

此外, gameBoard沒有采用直譯, 而是用雷區(qū), 因為這個代碼在原作中是假想從一個mine sweeper game(掃雷游戲)中選取的, 因此感覺比較適合. 當(dāng)然, 原代碼中g(shù)ameBoard也可以用mineField使這一段單獨出來的代碼更有語境. 但正如開頭聲明, 此文并不對中英文代碼之間的可讀性進(jìn)行比較. 這里也就不拘泥于找到gameBoard的對應(yīng)中文了.

再次歡迎各種推敲.

總結(jié)

以上是生活随笔為你收集整理的java中英对比_2017-11-09 中英文代码对比系列之Java一例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。