首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非短路逻辑(布尔型)运算符在Java/Scala中有很好的用途吗?

非短路逻辑(布尔型)运算符在Java/Scala中有很好的用途吗?
EN

Stack Overflow用户
提问于 2012-03-03 05:37:49
回答 4查看 1.4K关注 0票数 12

我最近发现Java (和Scala)包括非短路逻辑运算符&|^。我之前认为这些只能作为按位运算符。虽然可能有关于^的争论,但我想不出使用非短路逻辑运算符的很好的理由--尽管可以肯定,我可以设计一个示例。

这些运算符有用吗?它们似乎更有可能导致难以捕获的错误。

代码语言:javascript
复制
scala> def foo = {
     |   println("foo")
     |   true
     | }
foo: Boolean

scala> def bar = {
     |   println("bar")
     |   true
     | }
bar: Boolean

scala> foo || bar
foo
res5: Boolean = true

scala> foo | bar
foo
bar
res6: Boolean = true
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-03 05:40:27

如果右边是一个有副作用的函数,而你不想执行(例如日志记录),那么它们就很有用。然而,我认为这有点代码的味道,肯定会让下一个人觉得不直观。

票数 16
EN

Stack Overflow用户

发布于 2012-03-03 05:44:19

嗯。我知道,如果仔细使用,它们对于优化C/C++代码非常有用。它可能也适用于Java。

除了实际的位操作之外,C中的主要用途是消除流水线停滞。短路操作员需要分支操作。按位运算符将计算两边,并消除预测错误的分支和结果停滞的可能性。

票数 8
EN

Stack Overflow用户

发布于 2012-03-03 05:49:03

使用非短路布尔运算符意味着操作数有副作用。如果它们没有副作用,那么程序员可以在不改变功能的情况下使用短路版本。

在以函数式风格编写的代码中( Scala肯定鼓励这样做,但并不要求这样做),副作用表明正在发生一些不寻常的事情。不寻常的事情应该在代码中清楚地表示出来,而不是像非短路布尔运算符这样微妙的东西。

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

https://stackoverflow.com/questions/9540718

复制
相关文章

相似问题

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