我在Java中编写了以下if
语句:
if(methodName.equals("set" + this.name) ||
isBoolean() ? methodName.equals("is" + this.name) :
methodName.equals("get" + this.name)) {
...
}
在if
中编写此类表达式,将状态与条件分开是一种好习惯吗?这个表达式可以简化吗?
答案 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;
}
它当然更长,但无论如何我还不是真正打高尔夫球。