if语句中的条件运算符?

时间:2010-05-12 23:29:17

标签: java if-statement conditional-operator

我在Java中编写了以下if语句:

if(methodName.equals("set" + this.name) ||
    isBoolean() ? methodName.equals("is" + this.name) :
                  methodName.equals("get" + this.name)) {
    ...
}

if中编写此类表达式,将状态与条件分开是一种好习惯吗?这个表达式可以简化吗?

4 个答案:

答案 0 :(得分:8)

我会把它改成

if (methodName.equals("set" + this.name)
 || methodName.equals( (isBoolean() ? "is" : "get") + this.name)) {
    ...
}

答案 1 :(得分:2)

这是好的做法吗?如果它更容易阅读,那就好了。它使得阅读更容易,如果(1)它确实和(2)那种被它迷惑的人将不会阅读它。谁会读它?

答案 2 :(得分:2)

不会像以下那样工作吗?

if (methodName.equals("set" + this.name)
    || methodName.equals("get" + this.name)
    || (isBoolean() && methodName.equals("is" + this.name))) {
    ...
}

它比您使用三元运算符的方式更具可读性,当然更容易理解。它还有一个优点,它可以避免对isBoolean方法进行不必要的方法调用(它有1,2或4个方法调用,而你的方法总是有1或3;性能增益/损失可能太过分钟注意)。

此处还有一个类似的问题,标题为"Is this a reasonable use of the ternary operator?"一位用户the following to say

  

三元运算符意味着   返回一个值。

     

IMO,它不应该改变状态,而且   应该使用返回值。

     

在另一种情况下,使用if语句。   如果要执行语句   代码集团。

请注意我在包含'&&'的表达式周围加了括号为了便于阅读。它们不是必需的,因为在x && y之前评估m || n

您是否选择使用它取决于您,但我倾向于避免使用它。

答案 3 :(得分:2)

我倾向于将其更改为

if (methodName.equals(setterForThis())
   || methodName.equals(getterForThis())) {
    ...
}

提取了一些功能:

private String setterForThis() {
   return "set" + this.name;
}

private String getterForThis() {
   return (isBoolean() ? "is" : "get") + this.name;
}

它当然更长,但无论如何我还不是真正打高尔夫球。