5

我用ifJava 编写了以下语句:

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

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

4

4 回答 4

8

我会把它改成

if (methodName.equals("set" + this.name)
 || methodName.equals( (isBoolean() ? "is" : "get") + this.name)) {
    ...
}
于 2010-05-12T23:32:29.993 回答
2

这是好习惯吗?如果它使阅读更容易,那就太好了。如果 (1) 确实如此,并且 (2) 会被它弄糊涂的那种人不会阅读它,那么它会更容易阅读。谁来读它?

于 2010-05-12T23:36:34.430 回答
2

不会像以下工作吗?

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

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

这里还有一个类似的问题,标题为“这是对三元运算符的合理使用吗?” 一位用户有以下说法

三元运算符旨在返回一个值。

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

在另一种情况下,使用 if 语句。If 语句用于执行代码块。

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

是否选择使用它取决于您,但我倾向于避免使用它以提高可读性。

于 2010-05-13T00:07:01.117 回答
2

我倾向于将其更改为

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

提取了一些功能:

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

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

当然,它更长,但无论如何我并不真正喜欢高尔夫。

于 2010-05-13T00:53:27.737 回答