【问题标题】:If without else ternary operator如果没有 else 三元运算符
【发布时间】:2013-12-01 22:13:39
【问题描述】:

到目前为止,我一直在网上搜索,该语句总是有if和else条件,例如a ? b : c。我想知道if三元语句是否可以在没有else的情况下使用。 假设我有以下代码,如果PreparedStatement 不为空,我希望关闭它

(我正在使用 Java 编程语言。)

PreparedStatement pstmt;

//.... 

(pstmt!=null) ? pstmt.close : <do nothing>;

【问题讨论】:

  • 三元运算符不等同于 if/else。它实际上是一个必须有值的表达式。
  • 你不能在没有 else 的情况下使用三元,但你可以使用 Java 8 Optional 类:Optional.ofNullable(pstmt).ifPresent(pstmt::close)。请参阅下面的答案。
  • 代替你的 只是放置一个带有值的变量,比如数字 0 或字符串,它不应该做任何事情,尽管它确实返回一个类型,甚至是 undefined 或null 或 void 类型 MIGHT workm 但也可能导致 java 中的错误

标签: java if-statement ternary-operator


【解决方案1】:

使用:

<logic Expression> ? <method> : null;

例子:

(pstmt!=null) ? pstmt.close : null;

是肮脏的解决方案,但有效...

【讨论】:

    【解决方案2】:

    在 JavaScript 中你可以简单地做:

    expression ? doAction() : undefined
    

    因为这是在真正的 if 语句中实际发生的事情,所以 else 子句只是未定义的。我想你可以在(几乎?)任何编程语言中做几乎相同的事情,因为 else 子句只是放置一个不返回值的空类型变量,它不应该导致任何编译错误。

    或者如果所有其他方法都失败了,就创建一个函数返回

    function oy(x1,x2){if(x1) return x2();}
    
    oy(etzem==6, ()=>yichoyliss=8);
    
    

    【讨论】:

      【解决方案3】:

      pstmt != null &amp;&amp; pstmt.close;

      上面的代码行翻译为当表达式的左侧“翻译”为真时 -> 执行右侧。

      【讨论】:

        【解决方案4】:

        是的,你 can 确实这样做了(至少在 JavaScript 中):

        condition && x = true;
        

        或(在 JavaScript 中,在 Java 中可能有类似的方法):

        void(condition && x = true)
        

        【讨论】:

        • 我不确定 Java,但是使用 React,上面的语句可以工作。然而,它本身是行不通的,除非你把每一边都放在括号里。 IE。 (条件) && (x = true);
        【解决方案5】:

        你不能在没有 else 的情况下使用三元,但要在一行中做一个“if-without-else”,你可以使用 Java 8 Optional 类。

        PreparedStatement pstmt;
        
        //.... 
        
        Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
        

        【讨论】:

          【解决方案6】:

          No, you cannot do that. 试试这个:

          if(bool1 && bool2) voidFunc1();
          

          【讨论】:

            【解决方案7】:

            正如其他答案中提到的,您不能使用三元运算符来执行此操作。

            但是,如果需要,您可以使用 Java 8 Optional 和 lambdas 将这种逻辑放入单个语句中:

            Optional.of(pstmt).ifPresent((p) -> p.close())
            

            【讨论】:

              【解决方案8】:

              三元运算称为三元运算,因为它需要 3 个参数,如果需要 2,则为二元运算。

              如上所述,它是一个返回值的表达式

              如果您省略 else,您将遇到未定义的情况,即表达式不会返回值。

              因此,正如其他答案中所指出的,您应该使用 if statement

              【讨论】:

                【解决方案9】:

                三元if 运算符是特定的三元运算符。独一无二的。

                来自Wiki:

                在数学中,三元运算是 n = 3 的 n 元运算。

                这意味着您需要所有 3 个操作数。

                【讨论】:

                  【解决方案10】:

                  当你只有一个选择时为什么要使用三元运算符?

                  if (pstmt != null) pstmt.close(); 
                  

                  够了!

                  【讨论】:

                    【解决方案11】:

                    把它写出来?

                    if(pstmt != null) pstmt.close();
                    

                    长度完全相同。

                    【讨论】:

                      猜你喜欢
                      • 2021-07-08
                      • 2011-02-25
                      • 2010-12-12
                      • 2021-01-03
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-02-22
                      • 1970-01-01
                      相关资源
                      最近更新 更多