Java嵌套if-statement vs if-else

时间:2018-03-28 08:36:38

标签: java if-statement nested

我不确定我应该选择以下哪些代码段。

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的是什么?

3 个答案:

答案 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所说,编写明确有效的代码而不仅仅是有效的代码(以后读任何代码的人都会感激不尽)。

性能损失可以忽略不计,我甚至想知道运行时是否会出现性能损失,因为现在,编译器在优化代码方面做得非常好。