简短的IF-ELSE声明


82

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

这是我的无效代码(“不是声明”):

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

这怎么了 需要括号吗?哪里?


2
尽管mautetto提供了更好的编写方式,但此结构通常称为三元运算符。(如果您想知道;))
Reese Moore 2010年

它是条件运算符。“三元”仅表示它具有3个操作数。

链接到条件运算符的语言规范:docs.oracle.com/javase/specs/jls/se10/html/…–

Answers:


214

“三元表达式”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());

对我而言,后两种表达方式更具可读性,因为它们可以更清楚地传达您正在尝试执行的操作。(顺便说一句,您是否以错误的方式获得了您的条件?无论如何,这看起来像是无操作,而不是拨动开关)。

不要把字符数少可读性混在一起。关键是最容易理解的东西。并轻度滥用语言功能是迷惑读者的一种明确方法,或者至少使他们产生了心理上的双重误读。


1
只能使用条件运算符进行赋值是不正确的。您可以在需要表达式的任何地方使用它。

28
jXPanel6.setVisible(jXPanel6.isVisible());

或以您的形式:

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

14
FWIW,我觉得有从来没有必要写<bool condition> ? true : false,因为它是完全等同于刚<bool condition>
Andrzej Doyle 2012年

2
明显!但是monczek问起有关If-Else短语句的问题,所以我将其编码只是为了显示语法。
mauretto 2013年



2

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

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

jxPanel6.setVisible(!jxPanel6.isVisible);

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


另外,如果您尝试切换状态,我认为该语句是向后的。这就是为什么它不起作用吗?应该是jXPanel6.isVisible()吗?jXPanel6.setVisible(false):jXPanel6.setVisible(true);
安迪·

如果它不是切换语句,那么我不理解使已经设置的东西可见的目的。isVisible检索状态,而setVisible设置状态,对吗?如果isVisible语句返回true,为什么还要再次将其设置为true。我想念什么吗?
安迪·

1

您可以做到这一点,就像我在react hooks中那样:

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

下面的函数等于这个long:

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

希望对你有帮助^ _ ^

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.