为什么';情况及&;声明()';Java世界不流行吗?

为什么';情况及&;声明()';Java世界不流行吗?,java,boolean,readability,Java,Boolean,Readability,在Javascript世界中(特别是在React应用程序中),我见过像[2]这样的表达式。然而,在Java中,这并不流行 一, [1]和[2]的结果与语句()相同,如果isValid==false,则不会对求值 为什么像[2]这样的语法不流行?我的意思是,在我见过的任何Java项目中,我都从未遇到过这种情况 方法[2]是否有任何影响 它被认为是有害的吗 我用它作为简单的if语句的替代方案,会有什么惊喜吗 它会降低可读性吗 编辑: 我在Groovy控制台中测试这个。我想这相当于否定了这个问题

在Javascript世界中(特别是在React应用程序中),我见过像[2]这样的表达式。然而,在Java中,这并不流行

一,

  • [1]和[2]的结果与
    语句()相同,如果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();