代码吐槽1


我发现离厕所远一点有一点好:在去厕所的路上经常会有idea出来,这篇文章就是其中之一。

言归正传,我对看到的别人的代码吐槽的想法由来已久。大部分时候,碍于情面不能直说。有时候委婉地说了,愿意听的当场改,大部分时候都我行我素。以至于我觉得写这些代码的时候是不是都是从北大青鸟出来的?

第一个:尤达表达式,null = someVariable(Java代码中)

我很敬佩从C/C++转到Java的人,但是我很看不起转过来了不学习相应语法的人。

第二个:collection.size() == 0

估计老师没教过collection.isEmpty()

第三个:StringUtils.equals(“foo”, someVariable)

公司规范的受害者,而且顽固不化。什么时候需要用工具类来比较,什么时候不需要分不清。

第四个:someMap.get(SomeConstains.ABC)出现多处

只有一处问题不大,多处不知道static import。

第五个

class Foo {
  String bar;
}

// in some method
String bar = doStuff();
Foo foo = new Foo();
if(bar != null) {
  foo.bar = bar;
}

多余的null判断。

第六个

if(StringUtils.isNotBlank(someMap.get(Constants.FOO))) {
  someBean.setFoo(someMap.get(Constants.FOO));
}

综合之前多个吐槽点的代码,Constants用静态导入,StringUtils建议也用静态导入,两次get明显可以抽取变量,你要知道这种代码充斥屏幕的感觉是多么的糟糕。
从另外一个角度,写这代码的人可能不知道StringUtils.trimToNull。

第七个

Set<String> someSet = doStuff();
for(String item : someSet) {
  if(StringUtils.equals("foo", item)) {
    return true;
  }
}
return false;

蛋疼地遍历集合匹配元素,一句话,doStuff().contains(“foo”)

第八个

boolean flag = false;
for(String item : someList) {
  if(item.xxx()) {
    flag = true;
    break;
  }
}

// continue do stuff with flag

老实说这不是初学者的专利,是习惯了过程式思维的人可能写出来的代码,明显可以抽取出一个方法。知道内联方法吗???

第九个

try {
  doStuff();
} catch (Exception e) {
  logger.error('xxxxxx', e);
  throw new SomeException(e);
}

// in the top layer
try {
  doWork();
} catch (Exception e) {
  logger.error(e);
}

然后你就会看到两个一模一样的错误堆栈,是谁教的打日志后再抛异常的?也不看看顶层代码。

第十个

void someMethod() {
  anotherMethod('foo.*');
}

void anotherMethod(String pattern) {
  Pattern p = Pattern.compile(pattern);
  doWorkWithPattern();
}

静态正则表达式需要提取出来,每次compile的代价很大。

以上就是突然奇想得到的10个吐槽,之后还有,敬请期待。