为什么';情况及&;声明()';Java世界不流行吗?
在Javascript世界中(特别是在React应用程序中),我见过像[2]这样的表达式。然而,在Java中,这并不流行 一, [1]和[2]的结果与为什么';情况及&;声明()';Java世界不流行吗?,java,boolean,readability,Java,Boolean,Readability,在Javascript世界中(特别是在React应用程序中),我见过像[2]这样的表达式。然而,在Java中,这并不流行 一, [1]和[2]的结果与语句()相同,如果isValid==false,则不会对求值 为什么像[2]这样的语法不流行?我的意思是,在我见过的任何Java项目中,我都从未遇到过这种情况 方法[2]是否有任何影响 它被认为是有害的吗 我用它作为简单的if语句的替代方案,会有什么惊喜吗 它会降低可读性吗 编辑: 我在Groovy控制台中测试这个。我想这相当于否定了这个问题
语句()相同,如果isValid==false,则不会对求值
- 为什么像[2]这样的语法不流行?我的意思是,在我见过的任何Java项目中,我都从未遇到过这种情况
- 方法[2]是否有任何影响
- 它被认为是有害的吗
- 我用它作为简单的
if
语句的替代方案,会有什么惊喜吗
- 它会降低可读性吗
编辑:
我在Groovy
控制台中测试这个。我想这相当于否定了这个问题。感谢您的回复。if(isValid&&statement())
仅在statement()
返回boolean
时有效,否则该条件将无法编译。这样做可能被认为是不好的设计(取决于语句
实际做了什么),并且可能会降低可读性或您使用语句()的返回值的能力
除此之外,isValid&&statement()代码>不受该语言的支持-并且不要错误地将Java之类的语言与JavaScript之类的语言进行比较,它们遵循不同的范式
您可以执行类似于booleanb=isValid&&statement()的操作
但通常只有在希望以某种方式使用b
的值时才会这样做
Edit:根据请求,我还将添加一段关于a&b
的含义以及它在Java和JavaScript中的用途(尽管我在这里不是专家)
Java
通常,您可以使用&
(and)或|
(or)组合两个布尔表达式。因此,true&true
将导致true
,正如true | false
一样,但是true&false
将导致false
等
单字符运算符的问题是,即使您已经知道结果,也会计算每个参数。例如,当您看到false&…
时,您已经知道,当查看第一个参数时,结果是false
,而任何其他参数都不会产生任何影响
现在,如果您有一个表达式调用一些返回布尔值的方法,那么如果不需要这些方法,例如当这些方法本身非常昂贵时,您可能不希望执行这些方法。作为一个例子,考虑<代码> DysCekWeb网站和ISValueOn网站(“测试”)。code>isValueOnWebsite(“test”)
可能需要一段时间,如果needsCheckWebsite
为false,则不希望执行该方法
要解决这个问题,可以使用双字符运算符&&
和| |
,也称为短路运算符。这意味着,如果您编写needsCheckWebsite&&isValueOnWebsite(“test”)
并且needsCheckWebsite
为false,那么执行isValueOnWebsite(“test”)
的代价将不会很高,因为我们已经知道结果不会改变任何事情
因此,isValid&&statement()
意味着只有当isValid
时才应该执行statement()
JavaScript
在JavaScript中,短路操作符的工作方式与此类似,它计算第一个参数,如果结果仍然未知,则计算并返回第二个参数。但是,由于JavaScript是一种动态类型的语言(与静态类型的Java相反),您可以混合使用不同的类型,例如var value=null | | |“hello”
,这将导致value=“hello”
这允许开发人员使用&&
和| |
来处理布尔逻辑以外的事情,例如提供默认值,这在Java中是不可能的,因为静态类型(在Java中,您可以使用三元运算符?
,例如String s=input!=null?input:defaultValue
,但正如您所看到的,这看起来不像JavaScript的var s=input | | defaultValue
)那么优雅。它们是不可互换的:
isValid&&statement();
是一个表达式而不是语句。此外,它仅在statement()
方法的类型为boolean
时才起作用
因此,您只能在Java语言语法需要(谓词)表达式的情况下使用它
观点:如果您在满足上述要求时使用它,那么我确实会发现它“确实降低了可读性”。(因为它只能在某些情况下使用,再加上您自己的话(“现在做Java开发快十年了,我从来没有见过”),没有人会想到它)正如前面的回答中所解释的,`isValid&&statement();是一个表达式,需要存储在一些变量中,我们不能直接使用它。但是对于语句,它不是
使用表达式又占用了一个堆空间。好吧,Java语言不支持它。为什么它不支持它是基于观点的;-)我不理解这里的投票。如果它被重新标记为Groovy,我可能会取消我的否决票——但我对十年Java经验产生的问题感到有点失望。在我看来,如果您编写代码来讲述一个故事,那么无参数void方法是很好的。否则,我强烈建议您花时间遵循OOP原则,并从僵化的设计模式中获益:)是否会降低可读性?
-是!除了isValid&&a()
和isValid | a
哪一个做了什么?你必须思考短路是如何工作的-whi
if(isValid) {
statement();
}
isValid && statement();