if(A) then if(B)
VS
if(A and B)
哪个更好用,为什么?
答案 0 :(得分:5)
假设:
if (a) {
if (b) {
/// E1
}
/// E2
} else {
// E3
}
可能有人试图将其替换为:
if (a && b) {
/// E1
} else {
// E3
}
但它们不等价(a = true,b = false显示它的反驳参数)
除此之外,如果语言允许像AND,OR这样的短路操作,则没有理由不链接它们。而且他们中的大多数都允许它。表达式是等效的,您可以使用链式表单来提高代码的可读性。
答案 1 :(得分:4)
这取决于您的具体情况,但通常是:
1)if (A and B)
看起来更好/更清洁。如果A
和B
都适用,则会立即明确执行以下块。
2)if(A) then if(B)
在A
适用的时候想要做某些事情的情况下会更好,但B
并不适用。换句话说:
if (A):
if (B):
# something
else:
# something else
通常看起来比
好if (A and B):
# something
if (A and not B):
# something else
答案 2 :(得分:2)
您已对此算法'进行了标记。和'逻辑'从这个角度来看,我会说差别不大。
然而,在实际编程语言中,可能存在或可能不存在效率问题(甚至可执行性)。
C,C ++和Java等编程语言保证在A && B
表达式中首先评估A
并且不评估false B
。
如果B
具有计算成本,那么这可能会产生很大的影响,如果A
为假,则无效。
考虑以下C片段:
int*x
//....
if(x!=NULL&&(*x)>10) {
//...
在(*x)
很可能导致致命错误时评估x==NULL
。
这个'技巧' (称为短路评估)很有用,因为它避免了编写稍微冗长的详细信息:
if(x!=NULL){
if((*x)>10){
较早版本的VB(如VB6)因不发生短路而臭名昭着。
另一个是,如果B
为真,则不会评估A || B
中的A
。
关于支持的讨论:
Do all programming languages have boolean short-circuit evaluation?
在任何提供短路且具有优化编译器的语言中,您可以假设代码效率不太可能存在任何差异,并且具有最易读性。
通常是if(A&&B)
。