與一個印度外包Java技術負責人的對話

aqee發表於2013-02-26

  在《為什麼我會一天到晚的想說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...

相關文章