Java嵌套if-statement vs if-else

7 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");
}
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

我认为B更具可读性.但更像Java的是什么?

Kar*_*cki 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
Run Code Online (Sandbox Code Playgroud)


小智 6

考虑到Cyclomatic Complexity,您应该使用尽可能少的嵌套选项.也就是说,使用更具可读性的东西也是一个好主意.