简短的IF - ELSE声明

mon*_*zek 79 java if-statement

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

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

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

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

And*_*yle 207

"三元表达式" x ? y : z只能用于条件赋值.也就是说,你可以这样做:

String mood = inProfit() ? "happy" : "sad";
Run Code Online (Sandbox Code Playgroud)

因为三元表达式返回了一些东西(String在这个例子中是类型).

它并不是真正意味着用作短线的if-else.特别是,如果各个部分未返回值,或返回不兼容类型的值,则无法使用它.(因此,如果两种方法都返回相同的值,则可以执行此操作,但不应仅为了副作用调用它).

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

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)

这当然可以缩短为

jXPanel6.setVisible(jXPanel6.isVisible());
Run Code Online (Sandbox Code Playgroud)

对我来说,后两种表达方式都更具可读性,因为它们更清楚地传达了您正在尝试做的事情.(顺便说一句,你是否以错误的方式得到了你的条件?看起来这无论如何都是无操作的,而不是切换).

不要将低字符数可读性混淆.关键点是最容易理解的; 而轻度滥用语言特征是一种迷惑读者的明确方式,或者至少让他们做一次精神上的双重考虑.


mau*_*tto 27

jXPanel6.setVisible(jXPanel6.isVisible());
Run Code Online (Sandbox Code Playgroud)

或以您的形式:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);
Run Code Online (Sandbox Code Playgroud)

  • FWIW,我觉得从来没有*需要写`<bool condition>?true:false`因为它完全等同于`<bool condition>`. (14认同)
  • 明显!但是monczek问起有关If-Else短语句的问题,所以我将其编码只是为了显示语法。 (2认同)

per*_*ian 5

三元运算符只能是赋值的右侧,不能是其自身的语句。

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