我用if
Java 编写了以下语句:
if(methodName.equals("set" + this.name) ||
isBoolean() ? methodName.equals("is" + this.name) :
methodName.equals("get" + this.name)) {
...
}
这是在 中编写此类表达式if
以将状态与条件分开的好习惯吗?这个表达式可以简化吗?
我用if
Java 编写了以下语句:
if(methodName.equals("set" + this.name) ||
isBoolean() ? methodName.equals("is" + this.name) :
methodName.equals("get" + this.name)) {
...
}
这是在 中编写此类表达式if
以将状态与条件分开的好习惯吗?这个表达式可以简化吗?
我会把它改成
if (methodName.equals("set" + this.name)
|| methodName.equals( (isBoolean() ? "is" : "get") + this.name)) {
...
}
这是好习惯吗?如果它使阅读更容易,那就太好了。如果 (1) 确实如此,并且 (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
。
是否选择使用它取决于您,但我倾向于避免使用它以提高可读性。
我倾向于将其更改为
if (methodName.equals(setterForThis())
|| methodName.equals(getterForThis())) {
...
}
提取了一些功能:
private String setterForThis() {
return "set" + this.name;
}
private String getterForThis() {
return (isBoolean() ? "is" : "get") + this.name;
}
当然,它更长,但无论如何我并不真正喜欢高尔夫。