与一个印度外包 Java 技术负责人的对话

oschina
 oschina
发布于 2013年02月26日
收藏 23

抓狂

在《程序员之拍案惊奇:为什么我会一天到晚的想说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它都认为是true,都去执行,而不是只执行等于我传入值的那个case,比这个值大的它也执行。如果我传入2,case 2会执行,case 3也执行,我能把代码发给你吗,你可以在你机器上试一试。

审查者:

你是不是忘了在每个case后写break;?

外包技术负责人:

哦。我在switch case前后都放了一个break(断点),这样我可以按F6进行调试。

审查者:

我不是跟你说断点(breakpoinit),我说的是break语句!在谷歌里搜一下switch case

外包技术负责人:

哦!!!

[英文原文: Conversation with India Offshore Java tech lead... ]
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:与一个印度外包 Java 技术负责人的对话
加载中

最新评论(69

我土鳖

引用来自“Lunar_Lin”的评论

引用来自“LongCity”的评论

引用来自“Ellipse”的评论

引用来自“Tobyee”的评论

至少他们还有代码审核这一环节……

我们也有,不同的是我们领导要求我将
switch enumState {
case ...
}
改成
if("XXX".eqaulsIgnoreCase(stringState))
当时我也抓狂了

貌似有一本C++的书籍(好像是《effective c++》)介绍过,不建议下面这些东西:goto,break,continue,switch-case,因为这些东西会破坏程序的“逻辑流”(记不太清了,见谅)。。。

应该不是effective C++.这书应该不会这么偏执.
要破坏的逻辑流, 不管怎样都会破坏的. 都函数调用了, 还在乎什么流水线. 这些年很多书籍都TMD的胡乱写,包含中文,英文.业界都该反省反省. 该用的关键字就要用的. 看有人为了躲避goto 使用了dowhile(0) 心中真是无数次草泥马在奔腾. goto多么好的东西!!

do...while(0)在宏里用很方便,而且兼容一些老的编译器。
BaitaoSi
BaitaoSi
深刻
吴峻申
吴峻申
意思就是印度人什么都不懂(不知道要加break),又偷懒什么也不肯做(不肯查google),结果还对你写的代码说三道四,指手画脚~
kinghubo
kinghubo
人才啊
zaobao
zaobao
黑出翔了
wiseach
wiseach
JB 居然不是敏感词?!
i
ipanx.net
说的是基本规则阿
咔咔咔_
咔咔咔_
无力吐槽
小菜的奥特曼
小菜的奥特曼

引用来自“Lunar_Lin”的评论

引用来自“LongCity”的评论

引用来自“Ellipse”的评论

引用来自“Tobyee”的评论

至少他们还有代码审核这一环节……

我们也有,不同的是我们领导要求我将
switch enumState {
case ...
}
改成
if("XXX".eqaulsIgnoreCase(stringState))
当时我也抓狂了

貌似有一本C++的书籍(好像是《effective c++》)介绍过,不建议下面这些东西:goto,break,continue,switch-case,因为这些东西会破坏程序的“逻辑流”(记不太清了,见谅)。。。

应该不是effective C++.这书应该不会这么偏执.
要破坏的逻辑流, 不管怎样都会破坏的. 都函数调用了, 还在乎什么流水线. 这些年很多书籍都TMD的胡乱写,包含中文,英文.业界都该反省反省. 该用的关键字就要用的. 看有人为了躲避goto 使用了dowhile(0) 心中真是无数次草泥马在奔腾. goto多么好的东西!!

好想顶你,GoTo真的超级好用
邱胜
邱胜
语无伦次
返回顶部
顶部