【问题标题】:Short IF - ELSE statement简短的 IF - ELSE 语句
【发布时间】:2011-05-26 14:36:27
【问题描述】:

我试图让我的代码更具可读性,所以我决定使用一些简短的 IF 语句。

这是我的代码不起作用(“不是声明”):

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

这有什么问题?需要括号吗?在哪里?

【问题讨论】:

  • 虽然 mautetto 提供了一种更好的写法,但这种结构通常称为三元运算符。 (如果你想知道;))
  • 这是 条件 运算符。 “三元”只是意味着它有 3 个操作数。
  • 链接到条件运算符的语言规范:docs.oracle.com/javase/specs/jls/se10/html/…

标签: java if-statement


【解决方案1】:
jXPanel6.setVisible(jXPanel6.isVisible());

或以您的形式:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

【讨论】:

  • FWIW,我觉得从不需要写<bool condition> ? true : false,因为它完全等同于<bool condition>
  • 显然!但是 monczek 询问了 Short If-Else 语句,所以我对其进行编码只是为了显示语法。
【解决方案2】:

三元运算符只能是赋值的右边,不能是它自己的语句。

http://www.devdaily.com/java/edu/pj/pj010018/

【讨论】:

  • 条件运算符只能用于赋值的 RHS 是不正确的。它可以在任何可以使用表达式的地方使用。
【解决方案3】:

“三元表达式”x ? y : z 只能用于条件赋值。也就是说,您可以执行以下操作:

String mood = inProfit() ? "happy" : "sad";

因为三元表达式正在返回一些东西(在本例中为 String 类型)。

它并不是真的要用作简短的内联if-else。特别是,如果各个部分不返回值或返回类型不兼容的值,则不能使用它。 (因此,如果两种方法碰巧返回相同的值,您可以执行此操作,但您不应仅出于副作用目的调用它。

所以正确的方法就是使用 if-else 块:

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

当然可以缩短为

jXPanel6.setVisible(jXPanel6.isVisible());

对我来说,后两种表达方式都更具可读性,因为它们更清楚地传达了您想要做什么。 (顺便说一句,你的条件是不是弄错了?看起来这无论如何都是无操作,而不是切换)。

不要将低字符数可读性混为一谈。关键点是最容易理解的;并且轻微地滥用语言特征肯定会让读者感到困惑,或者至少让他们做出心理双重考虑。

【讨论】:

  • 只能使用条件运算符进行赋值是不正确的。您可以在需要表达式的任何地方使用它。
【解决方案4】:

正如其他人所说,某种形式

x ? y : z

是一个表达式,而不是一个(完整的)语句。它是一个需要在某个地方使用的右值——比如在赋值的右侧,或者函数的参数等。

也许你可以看看这个:http://download.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

【讨论】:

    【解决方案5】:

    我参加聚会有点晚了,但对于未来的读者来说。

    据我所知,您只是想切换可见性状态吗?为什么不直接使用! 运算符?

    jxPanel6.setVisible(!jxPanel6.isVisible);
    

    这不是 if 语句,但对于与您的示例相关的代码,我更喜欢这种方法。

    【讨论】:

    • 另外,如果您尝试切换状态,我认为该语句是倒退的。这就是它不起作用的原因吗?应该是 jXPanel6.isVisible() 吗? jXPanel6.setVisible(false) : jXPanel6.setVisible(true);
    • 如果它不是一个切换语句,那么我不明白让已经设置好的东西可见的目的。 isVisible 检索状态,而 setVisible 设置状态,对吗?如果 isVisible 语句返回 true,为什么要再次将其设置为 true。我错过了什么吗?
    【解决方案6】:

    你可以这么简单,我在 react hooks 中做到了:

     (myNumber == 12) ? "true" : "false"
    

    下面的 if 函数等于这个 long :

    if (myNumber == 12) {
      "true"
    } else {
      "false"
    }
    

    希望对你有帮助^_^

    【讨论】:

      最近更新 更多