與一個(gè)印度外包Java技術(shù)負(fù)責(zé)人的對(duì)話
在《程序員之拍案驚奇:為什么我會(huì)一天到晚的想說(shuō)FUCK!》這篇文章里我貼一張程序員抓狂的配圖,其實(shí)這一點(diǎn)都不夸張,讀讀下面這個(gè)故事,我相信無(wú)論誰(shuí)做這個(gè)代碼審查的當(dāng)事人都會(huì)抓狂,你覺(jué)得呢?
這是一個(gè)真實(shí)的發(fā)生在Java代碼審查中的故事。
被審查的是下面這行代碼:
- if (currentQueryType.name().equalsIgnoreCase("ALL_THE_WORDS")) {
 - ...
 - }
 
其中currentQueryType是枚舉,在其它地方定義,代碼如下:
- public enum QueryType {
 - BOOLEAN, DOCUMENT_IDS , ALL_THE_WORDS, ANY_OF_THE_WORDS, LITERAL_PHRASES;
 - }
 
審查者:
(心里想:什么玩意?)請(qǐng)使用switch-case語(yǔ)句重構(gòu)這段代碼
印度外包技術(shù)負(fù)責(zé)人:
這樣寫(xiě)不行:
- switch (type.ordinal()){
 - case 0:
 - ...
 - case 1:
 - ...
 - }
 
審查人:
???
像這樣寫(xiě):
- switch (type) {
 - case DOCUMENT_IDS:
 - ...
 - case ALL_THE_WORDS
 - ...
 - }
 
外包技術(shù)負(fù)責(zé)人:
這樣也不行:
審查者:
肯定能行,讓我看看你的編譯輸出信息
外包技術(shù)負(fù)責(zé)人:
我想原因可能是我們?cè)趕witch case里使用了===操作符,而在if/then/else里我們使用==進(jìn)行比較:http://stackoverflow.com/questions/2573145/switch-case-for-strings-in-javascript-not-working-as-expected
審查者:
我們不是寫(xiě)Javascript,是Java!
外包技術(shù)負(fù)責(zé)人:
但我這邊的switch case是這種情況:所有的case它都認(rèn)為是ture,都去執(zhí)行,而不是只執(zhí)行等于我傳入值的那個(gè)case,比這個(gè)值大的它也執(zhí)行。如果我傳入2,case 2會(huì)執(zhí)行,case 3也執(zhí)行,我能把代碼發(fā)給你嗎,你可以在你機(jī)器上試一試。
審查者:
你是不是忘了在每個(gè)case后寫(xiě)break;?
外包技術(shù)負(fù)責(zé)人:
哦。我在switch case前后都放了一個(gè)break(斷點(diǎn)),這樣我可以按F6進(jìn)行調(diào)試。
審查者:
我不是跟你說(shuō)斷點(diǎn)(breakpoinit),我說(shuō)的是break語(yǔ)句!在谷歌里搜一下switch case
外包技術(shù)負(fù)責(zé)人:
哦!!!
英文原文:Conversation with India Offshore Java tech lead...
譯文鏈接:http://www.aqee.net/conversation-with-india-offshore-java-tech-lead/















 
 
 



 
 
 
 