gpt4 book ai didi

performance - 嵌套 `if` 是否会提高性能?

转载 作者:行者123 更新时间:2023-12-03 17:05:59 24 4
gpt4 key购买 nike

如果我有这段代码:

if (isFoo() && isBar())
{
...
}

程序会计算第一个条件,然后计算第二个条件,然后判断是走还是跳过下面的block。

但是,如果我像这样嵌套条件:

if (isFoo())
if(isBar())
{
...
}

现在它检查第一个条件,如果它为假,则不会理会第二个条件。

如果第二个条件(作为一个函数)是一个耗时耗内存的 pig ,那么嵌套它似乎更好。

这是真的吗?我以前从未见过这样的代码,我在第一个示例之后做出了假设,但 IMO 很有可能。

最佳答案

这取决于编程语言。

大多数现代/流行语言都支持 Short circuit evaluation这意味着程序不会计算整个表达式,而是在得到整个表达式的结果后立即停止计算(其他人已经给出了例子)。

但也有异常(exception)

我知道不支持短路评估的两种语言是 Microsoft VB(6) 和 VB.NET。

VB6 根本不支持它,所以这里嵌套 Ifs if 是常见的优化技术。此外,在像

这样的表达式中

如果不是 rs 是 Nothing 且不是 rs.EOF

不使用嵌套 Ifs 会导致执行错误,而 rsNothing

VB.NET 引入了两个新的逻辑运算符 AndAlsoOrElse支持短路评估。

标准 VB.NET AndOr 运算符不支持短路评估,这是新手常见的错误来源开发人员。

优化

在这两种情况下(语言支持而不是短路评估)你可以检查表达式的顺序是先求值更快

因此,而不是(如果用户是女性,使用偶数键并登录,则在数据库中检查):

if (db.getUserSex() == FEMALE && userKey % 2 == 0 && userKey % 2 && isUserLogged)

使用(检查是否登录( bool 值),偶数键(算术运算符),最后检查数据库中的性别):

if (isUserLogged && userKey % 2 == 0 && db.getUserSex() == FEMALE)

关于performance - 嵌套 `if` 是否会提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com