8、不应忽略没有副作用的函数的返回值
当对函数的调用没有任何副作用时,如果结果被忽略,调用的意义何在?在这种情况下,要么函数调用没用,应该删除,要么源代码没有按预期运行。
案例:
9、条件执行的代码应该是可达的
总是true或false可能导致死代码的条件表达式。这样的代码总是有问题,永远不应该在生产中使用。
案例:
10、条件结构中的所有分支不应具有完全相同的实现
将switch或者if链中的所有分支都具有相同的实现是错误的。要么发生了复制粘贴错误并且应该执行不同的操作,要么根本不应该有switch/if链。
案例:
11、不应无条件替换map值
当为键或索引保存值然后无条件覆盖时,这样操作是没有意义的,也很可能是错误的。
案例:
12、返回值包含操作状态码时不应被忽略
当函数调用的返回值包含操作状态代码时,应测试该值以确保操作成功完成。
案例:
改造:
if (!f1.delete()) {
//文件删除失败;采取适当的行动
}
13、不应检查“compareTo”结果的特定值
虽然大多数compareTo方法返回 -1、0 或 1,但有些方法不会返回,并且compareTo针对 0 以外的特定值进行测试可能会导致误判。
案例:
改造:
改为>0比较。
14、应该检查从流读取返回的值
您不能假设任何给定的流读取调用都会填充byte[]传入的方法。相反,您必须检查 read 方法返回的值以查看读取了多少字节。如果不这样做,您就会引入有害且难以重现的错误。
案例:
改造 :
int count = 0;
while (count = is.read(buffer) > 0) {
…