if(A) then if(B)
vs
if(A and B)
哪一种更好用,为什么?
发布于 2015-06-05 02:12:00
给予:
if (a) {
if (b) {
/// E1
}
/// E2
} else {
// E3
}
人们可能会倾向于用以下文字来取代它:
if (a && b) {
/// E1
} else {
// E3
}
但是它们不是等价的(a= true和b= false表示它的反参数)。
除此之外,如果语言允许像AND,OR这样的短路操作,就没有理由不将它们链接起来。而且大多数人都允许这样做。表达式是等价的,您可以使用链式表单来提高代码的可读性。
发布于 2015-06-05 02:11:06
这取决于你的具体情况,但一般来说:
1) if (A and B)
看起来更好/更干净。如果同时应用A
和B
,那么下面的块将立即执行。
2)当if(A) then if(B)
应用于A
时,当您也想做某件事时,B
会更好,但B
不会。
if (A):
if (B):
# something
else:
# something else
一般比
if (A and B):
# something
if (A and not B):
# something else
发布于 2015-06-05 02:16:24
你已经标记了这个‘算法’和‘逻辑’,从这个角度来看,我可以说没有什么不同。
然而,在实际编程语言中,可能存在也可能没有效率问题(甚至是可执行性问题)。
像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)
。
https://stackoverflow.com/questions/30663812
复制相似问题