Algorithm 对于这段代码,有没有更优雅的解决方案?

Algorithm 对于这段代码,有没有更优雅的解决方案?,algorithm,Algorithm,我经常遇到这种结构,总是需要在functionB所在的位置复制代码。只是看起来有点马虎。有更好的方法吗 var b = someObjectThatWillNotBeNull; var a = getA(); if(a != null) { if(a.id == b.id) { functionA(); } else { functionB(); } } else { functionB(); } 你的意思是这样的吗?这稍微简单

我经常遇到这种结构,总是需要在functionB所在的位置复制代码。只是看起来有点马虎。有更好的方法吗

var b = someObjectThatWillNotBeNull;
var a = getA();

if(a != null) {
    if(a.id == b.id) {
        functionA();
    } else {
        functionB();
    }
} else {
    functionB();
}
你的意思是这样的吗?

这稍微简单一点:

if (a != null && a.id == b.id) {
    functionA();
} else {
    functionB();
}

这里我们利用了&&运算符,因为第一个exp将被计算为true,然后在if()语句中只计算下一个exp

if (a == null || a.id != b.id)
    functionB();
else
    functionA();

这可能更适合。您使用的语言是什么?如果a==null,则会引发异常。a、 id不会被实例化。您可以使用try/catch块,并用实例代替其他块,但这同样是草率的。NET 4.0在if语句中添加了一个新关键字(我认为“也”?),只有在第一次检查成功时才会继续。取决于您使用的语言。@Corey不会。如果
a==null
&&
后面的代码将不会被计算。@trutheality至少在任何一种正常的语言中:)对,我假设
&&
是一个短路“和”,这就是通常的情况。有没有一种语言表示非短路“和”?我不知道有一种,这就是为什么我对我的答案很满意的原因。只是我的答案翻了一下。个人品味,至于哪个更清晰+1尽管如此。
        if(a != null && a.id==b.id) {
         functionA();
        } 
        else {
        functionB();
        }