首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果(A )那么如果( B)和如果(A和B)有什么区别吗?

如果(A )那么如果( B)和如果(A和B)有什么区别吗?
EN

Stack Overflow用户
提问于 2015-06-05 10:05:24
回答 3查看 262关注 0票数 3

if(A) then if(B)

vs

if(A and B)

哪一种更好用,为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-05 10:12:00

给予:

代码语言:javascript
代码运行次数:0
运行
复制
if (a) {
  if (b) {
    /// E1
  }
  /// E2
} else {
  // E3
}

人们可能会倾向于用以下文字来取代它:

代码语言:javascript
代码运行次数:0
运行
复制
if (a && b) {
 /// E1
} else {
 // E3
}

但是它们不是等价的(a= true和b= false表示它的反参数)。

除此之外,如果语言允许像AND,OR这样的短路操作,就没有理由不将它们链接起来。而且大多数人都允许这样做。表达式是等价的,您可以使用链式表单来提高代码的可读性。

票数 5
EN

Stack Overflow用户

发布于 2015-06-05 10:11:06

这取决于你的具体情况,但一般来说:

1) if (A and B)看起来更好/更干净。如果同时应用AB,那么下面的块将立即执行。

2)当if(A) then if(B)应用于A时,当您也想做某件事时,B会更好,但B不会。

代码语言:javascript
代码运行次数:0
运行
复制
if (A):
    if (B):
        # something
    else:
        # something else

一般比

代码语言:javascript
代码运行次数:0
运行
复制
if (A and B):
    # something
if (A and not B):
    # something else
票数 4
EN

Stack Overflow用户

发布于 2015-06-05 10:16:24

你已经标记了这个‘算法’和‘逻辑’,从这个角度来看,我可以说没有什么不同。

然而,在实际编程语言中,可能存在也可能没有效率问题(甚至是可执行性问题)。

像C、C++和Java这样的编程语言保证在表达式A && B中首先计算A,如果没有计算false B的话。如果B在计算上很昂贵,或者如果A是假的,那么这会产生很大的影响。

考虑下面的C片段:

代码语言:javascript
代码运行次数:0
运行
复制
int*x
//....
if(x!=NULL&&(*x)>10) {
//...

评估(*x)时,x==NULL很可能会导致致命错误。

这个“技巧”(称为短路评估)非常有用,因为它避免了编写稍微冗长一些的东西的需要:

代码语言:javascript
代码运行次数:0
运行
复制
if(x!=NULL){
  if((*x)>10){

较早版本的VB,如VB6,因没有短路而臭名昭著。

另一种情况是,如果B为真,A || B中的A将不会被计算。

关于支持的讨论:

Do all programming languages have boolean short-circuit evaluation?

在任何提供短路并具有优化编译器的语言中,您可以假设代码效率不太可能有任何差异,并且可以使用最易读的语言。这通常是if(A&&B)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30663812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档