if(A) then if(B) 和 if (A and B) 之间有什么区别?
What's the difference between if(A) then if(B) and if (A and B)?
if(A) then if(B)
对
if(A and B)
哪个更好用,为什么?
这取决于您的具体情况,但一般来说:
1) if (A and B)
看起来 better/cleaner。很明显,如果 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
鉴于:
if (a) {
if (b) {
/// E1
}
/// E2
} else {
// E3
}
人们可能会想将其替换为:
if (a && b) {
/// E1
} else {
// E3
}
但它们不等价(a = true 和 b = false 显示反驳)
除此之外,如果语言允许 AND、OR 等短路操作,则没有理由不将它们链接起来。他们中的大多数人都允许这样做。表达式是等价的,你可以使用链式形式来提高代码的可读性。
您已标记此 'algorithm' 和 'logic',从这个角度来看,我认为差别不大。
然而,在实际的编程语言中,可能存在也可能不存在效率(甚至可执行性)问题。
C、C++ 和 Java 等编程语言保证在表达式 A && B
中首先计算 A
,如果为 false,则不计算 B
。
如果 B
在计算上昂贵,或者如果 A
为假则无效。
考虑以下 C 代码段:
int*x
//....
if(x!=NULL&&(*x)>10) {
//...
在 x==NULL
时计算 (*x)
很可能会导致致命错误。
这个'trick'(称为短路评估)很有用,因为它避免了编写稍微冗长的代码:
if(x!=NULL){
if((*x)>10){
VB 的旧版本,例如 VB6,因没有短路而臭名昭著。
另一个是如果A
为真,A || B
中的B
将不会被计算。
关于支持的讨论:
Do all programming languages have boolean short-circuit evaluation?
在任何提供短路并具有优化编译器的语言中,您可以假设代码效率不太可能有任何差异,并选择最具可读性的语言。
这通常是 if(A&&B)
.
if(A) then if(B)
对
if(A and B)
哪个更好用,为什么?
这取决于您的具体情况,但一般来说:
1) if (A and B)
看起来 better/cleaner。很明显,如果 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
鉴于:
if (a) {
if (b) {
/// E1
}
/// E2
} else {
// E3
}
人们可能会想将其替换为:
if (a && b) {
/// E1
} else {
// E3
}
但它们不等价(a = true 和 b = false 显示反驳)
除此之外,如果语言允许 AND、OR 等短路操作,则没有理由不将它们链接起来。他们中的大多数人都允许这样做。表达式是等价的,你可以使用链式形式来提高代码的可读性。
您已标记此 'algorithm' 和 'logic',从这个角度来看,我认为差别不大。
然而,在实际的编程语言中,可能存在也可能不存在效率(甚至可执行性)问题。
C、C++ 和 Java 等编程语言保证在表达式 A && B
中首先计算 A
,如果为 false,则不计算 B
。
如果 B
在计算上昂贵,或者如果 A
为假则无效。
考虑以下 C 代码段:
int*x
//....
if(x!=NULL&&(*x)>10) {
//...
在 x==NULL
时计算 (*x)
很可能会导致致命错误。
这个'trick'(称为短路评估)很有用,因为它避免了编写稍微冗长的代码:
if(x!=NULL){
if((*x)>10){
VB 的旧版本,例如 VB6,因没有短路而臭名昭著。
另一个是如果A
为真,A || B
中的B
将不会被计算。
关于支持的讨论:
Do all programming languages have boolean short-circuit evaluation?
在任何提供短路并具有优化编译器的语言中,您可以假设代码效率不太可能有任何差异,并选择最具可读性的语言。
这通常是 if(A&&B)
.