相关疑难解决方法(0)

为什么语言不能使用短路评估?

为什么语言不能使用短路评估?不使用它有什么好处吗?

我看到它可能导致一些表演问题......这是真的吗?为什么?


相关问题:使用短路评估的好处

language-agnostic conditional short-circuiting

39
推荐指数
3
解决办法
9068
查看次数

使用短路评估的好处

boolean a = false, b = true;
if ( a && b ) { ... };
Run Code Online (Sandbox Code Playgroud)

在大多数语言中,b不会被评估,因为它a是假的,所以a && b不可能是真的.我的问题是,在架构方面,短路会不会更慢?在管道中,您是否只是在等待获得a的结果时停止以确定是否应该评估b?改为使用嵌套ifs会更好吗?这甚至有帮助吗?

此外,有谁知道通常所谓的短路评估?这个问题出现之后我发现我的编程朋友从未听说过短路评估,并表示它不常见,也没有在许多语言中找到,并且管道效率低下.我不确定最后一个,所以问你们大家好!

好吧,我想一个不同的例子或许可以解释我的朋友可能来自哪里.他认为,自从评估如下的声明:

(a) if ( ( a != null ) && ( a.equals(b) ) ) { ... }
Run Code Online (Sandbox Code Playgroud)

会崩溃系统,一个没有短路的架构(从而不允许像上面这样的语句)在处理这样的语句时会更快:

(b) if ( ( a == 4 ) && ( b == 5 ) )
Run Code Online (Sandbox Code Playgroud)

因为如果它不能并行地做(a),它就不能并行地做(b).在这种情况下,允许短路的语言比没有短路的语言慢.

我不知道这是不是真的.

谢谢

architecture pipeline

10
推荐指数
4
解决办法
6457
查看次数

快速退出方法或构造函数是否有好处?

我认为这部分与短路逻辑有关,但我找不到任何直接回答我问题的问题.可能的相关问题:使用短路评估的好处,为什么要使用短路代码?

考虑以下两个代码块,这两个代码块都是类的可能构造函数

public MyClass(OtherClass other){
    if (other != null) {
       //do something with other, possibly default values in this object
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个

public MyClass(OtherClass other){
    if (other == null)  return;

    //do something with other, possibly default values in this object
}
Run Code Online (Sandbox Code Playgroud)

对前者做后者有什么好处?构造函数中没有其他代码,只是使用该other对象构造此代码的代码.

c# constructor short-circuiting

4
推荐指数
1
解决办法
126
查看次数

有人可以解释这行代码吗?(逻辑和分配运营商)

我已经看到了以下代码行,我知道他们做了什么,但我不知道第二行是如何工作的(因此如何将它应用于另一种情况).

$user = User::model()->findByPk(123);
empty($user->profile) and $user->profile = new Profile();
Run Code Online (Sandbox Code Playgroud)

代码尝试从数据库中查找用户,如果没有配置文件,则创建一个新的以供以后使用.

我之前也见过代码,如下所示:

$variable1 = $variable2 = $variable3;
Run Code Online (Sandbox Code Playgroud)

它做了一些比简单分配三个相同的东西更复杂的东西,但我发现不可能搜索这类东西来找出它的任何信息,更不用说找到我遇到的原始代码了.我认为它最初在那里有'和'.有谁知道如何搜索具有多个等号的代码,而不只是if语句?

抱歉这两个问题在一个(并且模糊不清)和可怕的标题(当我知道名字是什么时,我会解决它,如果它像一个tenary陈述)).

php

1
推荐指数
1
解决办法
328
查看次数