使用 if-else 语句的不同设计决策
Different design decisions with if-else-statements
您更喜欢以下哪一项:
SomeEnum enum = SomeEnum.SOMETHING;
if (aString.equals(anotherString)) {
enum = SomeEnum.SOMETHING_ELSE;
}
return foo.bar(enum);
或
if (aString.equals(anotherString)) {
return foo.bar(SomeEnum.SOMETHING_ELSE);
}
return foo.bar(SomeEnum.SOMETHING);
我想我更喜欢第一个,因为它只有1点return。另一方面,我认为第二个更容易阅读。你怎么看?也许您有更复杂的解决方案。
这取决于我们谈论的项目数量:
对于大型枚举,我会保留一个从字符串到枚举对象的映射。我会在地图中查找项目并默认提供 SomeEnum.SOMETHING。
public SomeEnum get(String key, SomeEnum defaultValue){
SomeEnum value = this.map.get(key);
return value == null ? defaultValue : value;
}
对于较少的项目,我可能会使用 switch 语句:
public SomeEnum get(String key, SomeEnum defaultValue){
switch(key){
case "somevalue1" : return SomeEnum.SOME_VALUE_1;
case "somevalue2" : return SomeEnum.SOME_VALUE_2;
default: return defaultValue;
}
}
但如果实际上只是问题中提到的两种情况,我会选择
return aString.equals(anotherString) ? SomeEnum.SOMETHING_ELSE : SomeEnum.SOMETHING;
没关系。像这样的简化可能会被编译器优化!您应该使用任何能让您的代码更具可读性的东西!
您更喜欢以下哪一项:
SomeEnum enum = SomeEnum.SOMETHING;
if (aString.equals(anotherString)) {
enum = SomeEnum.SOMETHING_ELSE;
}
return foo.bar(enum);
或
if (aString.equals(anotherString)) {
return foo.bar(SomeEnum.SOMETHING_ELSE);
}
return foo.bar(SomeEnum.SOMETHING);
我想我更喜欢第一个,因为它只有1点return。另一方面,我认为第二个更容易阅读。你怎么看?也许您有更复杂的解决方案。
这取决于我们谈论的项目数量:
对于大型枚举,我会保留一个从字符串到枚举对象的映射。我会在地图中查找项目并默认提供 SomeEnum.SOMETHING。
public SomeEnum get(String key, SomeEnum defaultValue){
SomeEnum value = this.map.get(key);
return value == null ? defaultValue : value;
}
对于较少的项目,我可能会使用 switch 语句:
public SomeEnum get(String key, SomeEnum defaultValue){
switch(key){
case "somevalue1" : return SomeEnum.SOME_VALUE_1;
case "somevalue2" : return SomeEnum.SOME_VALUE_2;
default: return defaultValue;
}
}
但如果实际上只是问题中提到的两种情况,我会选择
return aString.equals(anotherString) ? SomeEnum.SOMETHING_ELSE : SomeEnum.SOMETHING;
没关系。像这样的简化可能会被编译器优化!您应该使用任何能让您的代码更具可读性的东西!