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).在这种情况下,允许短路的语言比没有短路的语言慢.
我不知道这是不是真的.
谢谢
我认为这部分与短路逻辑有关,但我找不到任何直接回答我问题的问题.可能的相关问题:使用短路评估的好处,为什么要使用短路代码?
考虑以下两个代码块,这两个代码块都是类的可能构造函数
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对象构造此代码的代码.
我已经看到了以下代码行,我知道他们做了什么,但我不知道第二行是如何工作的(因此如何将它应用于另一种情况).
$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陈述)).