期末考试成绩公布了,一学生气愤地找老师评理。学生:“老师,我认为这门课我不应该得零分。”老师:“是啊,我也这么认为,可学校规定,最低只能打零分。”
做CodeReview的时候,评价一段代码的好坏通常是仁者见仁。还好有一种无法拒绝的理由叫做【规定】。
下面讲一种通过规定以理服人的例子:
观点
不要用xx != null && xx.length()>0 来判空,可以使用apache的commons包。例如使用:
StringUtils.isNotEmpty
CollectionUtils.isEmpty
不容拒绝理由
使用xx != null && xx.length()>0 来判空,公司里的静态代码检查会检查让你覆盖这两个条件,你需要写两个单测来完成任务。而使用apache的commons只需要写一个单测。你的条件覆盖率达标了吗?
深层原因
【编程一生】的文章怎么可能只给一个不容拒绝的理由这么浅。建议这样使用毕竟有背后深层的优势,拿StringUtils.isNotEmpty举例看看apache的代码优雅在哪里。
StringUtils类的源码:
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
咦,好像和自己实现的差不多嘛!str == null || str.length() == 0 取个反,还多个一个反运算。效率一点也不高嘛!
请注意这两个方法是静态的!静态方法在类加载时候初始化,常驻在内存中只存一份。而自己写的判断语句,只能这个方法使用,其他方法同样的语句要复制一份。静态方法更加方便快捷。
当然,apache的commons最根本的优势是语义更加清晰,更易读。