是什么意思|| 在两个函数调用之间
{
//some code
return Find(n.left,req)||Find(n.right,req);
}
http://www.careercup.com/question?id=7560692
有人能帮我理解吗?提前谢谢了。
是什么意思|| 在两个函数调用之间
{
//some code
return Find(n.left,req)||Find(n.right,req);
}
http://www.careercup.com/question?id=7560692
有人能帮我理解吗?提前谢谢了。
这意味着如果两个函数之一为真(或两者都为真),则返回真。
取决于编程语言,该方法调用 Find(n.left,req) -> 如果为真 - 返回真。如果为假,则调用 Find(n.right,req) 并返回其布尔值。
return Find(n.left,req)||Find(n.right,req);
表示首先执行 find {Find(n.left,req)}并返回 true 如果它返回 true 或
执行第二次查找,如果返回true,则返回true,否则返回false。
在 Java(以及 C 和 C#)中 || 意思是“懒惰的或”。单笔| 也表示“或”,但操作方式略有不同。
为了计算 a||b,计算机计算 a 的真值(真或假),如果 a 为真,则返回真值而不费心计算 b,因此是“懒惰”一词。只有当 a 为假时,它才会检查 b 是否为真(因此如果 a 或 b 为真)。
为了计算 a|b,计算机首先计算出 a 和 b 的值,然后将答案“或”在一起。
“懒人或”|| 效率更高,因为它有时根本不需要计算 b。您可能要使用 a|b 的唯一原因是如果 b 实际上是一个函数(方法)调用,并且由于该方法的某些副作用,您希望确保它只执行一次。我个人认为这种编程技术很差,并且在极少数情况下我希望始终显式计算 b 我显式地执行此操作,然后使用惰性或。
例如,考虑一个返回布尔值的函数或方法 foo()。代替
boolean x = a|foo(something);
我会写
布尔 c=foo(某事); 布尔 x = a||c;
它明确地调用 foo() 一次,所以你知道发生了什么。
更好的编程实践,恕我直言。事实上,最好的做法是完全消除 foo() 中的副作用,但有时这很难做到。
如果您使用惰性或 || 考虑一下您评估它的顺序。如果 a 易于计算且通常为真,则 a||b 将比 b||a 更有效,因为大多数情况下只需要对 a 进行简单的计算。相反,如果 b 通常为假且难以计算,则 b||a 不会比 a|b 更有效。如果 a 或 b 中的一个是常量,而另一个是方法调用,则应该将常量作为第一项 a||foo() 而不是 foo()||a,因为方法调用总是比使用 a 慢简单的局部变量。
希望这可以帮助。
彼得·韦伯