我不确定我应该选择以下哪些代码段。
A)嵌套
if(cond1 != null) {
if(cond2 != null) {
//Do the good stuff here
} else {
System.out.println("Sorry cond2 was null");
}
} else {
System.out.println("Sorry cond1 was null");
}
B)持平
if(cond1 == null) {
System.out.println("Sorry cond1 was null");
} else if(cond2 == null) {
System.out.println("Sorry cond2 was null");
} else {
//Do the good stuff
}
我认为B更具可读性。但更像Java的是什么?
答案 0 :(得分:10)
第二个if-then-else
更具可读性,并在文档https://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html中使用。
这可能取决于项目的代码约定,但应避免深度代码嵌套,因为它不可读。不鼓励使用表面嵌套的if
语句而不是if-then-else
。
您的特定示例看起来像前置条件,通常使用Objects.requireNonNull
更容易编写:
Objects.requireNonNull(cond1);
Objects.requireNonNull(cond2);
//Do the good stuff
答案 1 :(得分:6)
考虑Cyclomatic Complexity,您应该使用最少的嵌套选项。也就是说,使用更具可读性的东西也是一个好主意。
答案 2 :(得分:1)
我会投票支持接近B
我通常更喜欢先处理否定案件,然后处理好案件。
示例:强>
public String doWork(String arg1, String arg2)
{
if(arg1 == null || arg2 == null)
{
// do stuff
return null; // if you wish to...
}
// do important stuff
}
一般说明:
我总是选择更易读/可理解的方法。
正如Joshua Bloch所说,编写明确有效的代码而不仅仅是有效的代码(以后读任何代码的人都会感激不尽)。
性能损失可以忽略不计,我甚至想知道运行时是否会出现性能损失,因为现在,编译器在优化代码方面做得非常好。