这是更好的编码方式

时间:2016-01-25 09:02:49

标签: java

可能看起来像个愚蠢的问题。我只是想知道哪种是更好的编码方式。

选项1:

if(a==null) {
    a=getA();
    return a;
} else {
    return a;
}

选项2:

if(a==null) {
    a=getA();
}
return a;

变量a是一个静态变量,用于缓存getA()并避免多次调用它。

5 个答案:

答案 0 :(得分:6)

还有一个更短的第三种选择 - 使用三元条件运算符:

return a != null ? a : getA();

编辑:我认为a是一个局部变量,因此如果它是null则不必分配。另一方面,如果它是用作缓存的实例变量(以避免多次调用getA()),则需要将getA()的结果分配给a,在这种情况下我会使用你的第二个选择,因为它更短,更清晰(你仍然可以使用带有赋值的三元条件运算符 - return a != null ? a : (a = getA()); - 但我发现它不那么明确了。)

答案 1 :(得分:1)

我更喜欢第二种选择,因为只有一个return语句,这可以帮助调试(你只需要放入一个断点而不是两个断点)。你也可以在第一选择中复制代码。

但在这种情况下,我更喜欢使用三元条件:

return a == null ? getA() : a;

答案 2 :(得分:1)

我更喜欢第二种选择,最佳做法是在方法中只有一个return语句。这将是更易读的代码。

答案 3 :(得分:0)

第二个更简洁,因此可能更好,但这是一个主观问题,没有人可以给你一个特别客观的答案。无论您喜欢什么或适合您的团队编码标准都是答案。

正如已经指出的那样,有一种更短的方法:

return a!=null ? a : getA();

但同样,这完全取决于您和您的团队喜欢什么。我个人更喜欢你展示的第二种方式,因为它更具可读性(在我看来)。

答案 4 :(得分:0)

我假设a是一个类成员,而getA()是一个创建a实例的方法。

最好的解决方案应该是在被调用的方法中推送这个逻辑。换句话说,而不是:

void someFunction() {
    // logic
    if(a==null) {
        a=getA();
    }
    return a;
}

A getA() {
    // creation logic of instance A
    return newAInstance;
}

你应该:

void someFunction() {
    // logic

    return getA();
}

A getA() {
    if(a == null) {
        // creation logic of instance A
    }
    return a;
}

方法调用的成本很低,并且在实例化 a时无需处理