鉴于下一个代码示例,您认为哪个更好,或者您能想到以更优雅的方式对此进行编码的另一种方式吗?
if中的重复条件(两次检查'b')
if(a || b) {
doAB();
}
if(b) {
doB();
}
重复代码(两次doAB()):
if(a) {
doAB();
}
if(b) {
doAB();
doB();
}
或混合......
if(a || b) {
doAB();
if(b) {
doB();
}
}
修改
一位同事提出了这个建议:
int mask = a?1:b?2:0;
switch(mask) {
case 2:
doB();
case 1:
doAB();
}
答案 0 :(得分:4)
我猜第一个是最好的,因为第二个很可能是不正确的。我会使用你认为简单且不易出错的形式。
最喜欢的第二个例子应该是
if (a) {
doAB();
} else if (b) {
doAB();
doB();
}
如果是a,则不能为b,反之亦然
在这种情况下,您不需要两个条件。它应该是==!b
// a || b is always true
doAB();
if(b) {
doB();
}
答案 1 :(得分:2)
完全不同的观点:避免使用if / else的东西。
在OO语言中,您可以使用多态而不是if / else。而不是要求某个州;然后调用一个特定的方法;你只需在某个对象上调用一个方法;并且对象的类型将确保该方法执行正确的操作。
换句话说:在某些时候,您决定必须实例化哪个具体类;以后,你不用担心了。
你知道,smalltalk语言甚至没有 if (作为关键字/语言构建int)。
当然,你不应该进去,只是换另一个。相反,你可以退后一步,然后判断你的问题是如何被重新构建的;利用多态性。
你可以在这里找到一个非常好的video,它可以在现实中看起来如何。