與一個印度外包Java技術負責人的對話
在《程序員之拍案驚奇:為什么我會一天到晚的想說FUCK!》這篇文章里我貼一張程序員抓狂的配圖,其實這一點都不夸張,讀讀下面這個故事,我相信無論誰做這個代碼審查的當事人都會抓狂,你覺得呢?
這是一個真實的發生在Java代碼審查中的故事。
被審查的是下面這行代碼:
if (currentQueryType.name().equalsIgnoreCase("ALL_THE_WORDS")) { ... }
其中currentQueryType是枚舉,在其它地方定義,代碼如下:
public enum QueryType { BOOLEAN, DOCUMENT_IDS , ALL_THE_WORDS, ANY_OF_THE_WORDS, LITERAL_PHRASES; }
審查者:
(心里想:什么玩意?)請重構這個switch-case語句
印度外包技術負責人:
這樣寫不行:
switch (type.ordinal()){ case 0: ... case 1: ... }
審查人:
???
像這樣寫:
switch (type) { case DOCUMENT_IDS: ... case ALL_THE_WORDS ... }
外包技術負責人:
這樣也不行:
審查者:
肯定能行,讓我看看你的編譯輸出信息
外包技術負責人:
我想原因可能是我們在switch case里使用了===操作符,而在if/then/else里我們使用==進行比較:http://stackoverflow.com/questions/2573145/switch-case-for-strings-in-javascript-not-working-as-expected
審查者:
我們不是寫Javascript,是Java!
外包技術負責人:
但我這邊的switch case是這種情況:所有的case它都認為是ture,都去執行,而不是只執行等于我傳入值的那個case,比這個值大的它也執行。如果我傳入2,case 2會執行,case 3也執行,我能把代碼發給你嗎,你可以在你機器上試一試。
審查者:
你是不是忘了在每個case后寫break;?
外包技術負責人:
哦。我在switch case前后都放了一個break(斷點),這樣我可以按F6進行調試。
審查者:
我不是跟你說斷點(breakpoinit),我說的是break語句!在谷歌里搜一下switch case
外包技術負責人:
哦!!!
[英文原文: Conversation with India Offshore Java tech lead... ]
來自:http://www.aqee.net/conversation-with-india-offshore-java-tech-lead/
來自:http://www.aqee.net/conversation-with-india-offshore-java-tech-lead/
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!