目前正在修改大型地图类,并且出现了一些新规则让我想知道这里最好的选择是什么。
想象一下这样的经典映射函数:
yyy.setType(xxx.getType);
yyy.setSomething(xxx.getSomethigElse);
yyy.setThisAsWell(xxx.getThatAsWell);
我现在有条件检查,哪个更好? (知道我将来不会有类似的条件检查):
final Boolean isRuleApplying = xxx.getRule == RULE;
yyy.setType(
isRuleApplying ? RULE_STUFF : xxx.getType
);
yyy.setSomething(
isRuleApplying ? RULE_STUFF_OTHER : xxx.getSomethigElse
);
yyy.setThisAsWell(
isRuleApplying ? RULE_STUFF_AGAIN : xxx.getThatAsWell
);
或者使用旧的if else更好吗?
if (xxx.getRule == RULE) {
yyy.setType(RULE_STUFF);
yyy.setSomething(RULE_STUFF_OTHER);
yyy.setThisAsWell(RULE_STUFF_AGAIN);
} else {
yyy.setType(xxx.getType);
yyy.setSomething(xxx.getSomethigElse);
yyy.setThisAsWell(xxx.getThatAsWell);
}
我觉得使用三元操作会降低其可维护性并增加复杂性(每次检查)。但我想得到一些其他意见。
注意:我有一堆try..catch所以使用if意味着复制那些try块或在每个块中添加if会杀死可读性。
答案 0 :(得分:1)
这个问题没有绝对的答案。这取决于。
使用三元运算符,您会立即看到:
但是有一些(很多?)开发人员不习惯那个操作符(是他们的错还是我们的?),所以使用它可能会迫使他们查找其含义而不是立即理解代码(对我而言) ,具有LISP背景,三元运算符始终与if
语句一样自然。
这是真的,使用三元运算符,你最终得到三个条件而不是一个(但你应该忽略这些微小的性能影响,除非你发现它在你的应用程序中真的很痛)。
另一方面,使用if
语句,您会立即看到:
即使是Java初学者也会理解你的代码。
所以,这取决于:
当然,所有这些都不是面向对象的。如果代码结构和预算允许,也许您可以使用多态而不是条件来提出解决方案。