如果必须检查3个条件,并且在某些情况下返回相同的值,如下例所示:
if (designatorType != AttributeDesignator.ENVIRONMENT_TARGET)
return new EvaluationResult(BagAttribute.
createEmptyBag(attributeType));
if (! attributeId.toString().equals("processor-load"))
return new EvaluationResult(BagAttribute.
createEmptyBag(attributeType));
if (! attributeType.toString().equals(IntegerAttribute.identifier))
return new EvaluationResult(BagAttribute.
createEmptyBag(attributeType));
像这样重写它不是更好吗
if (designatorType != AttributeDesignator.ENVIRONMENT_TARGET) ||
(! attributeId.toString().equals("processor-load")) ||
(! attributeType.toString().equals(IntegerAttribute.identifier)) ||
return new EvaluationResult(BagAttribute.
createEmptyBag(attributeType));
这可能是非常主观的,但我希望有人能给出一个有效的答案: - )。
答案 0 :(得分:2)
根本没有混淆。你有三个独立的先决条件导致相同的后置条件(结果)。
答案 1 :(得分:2)
public void someMethod()
{
if (isConditionMet())
return new EvaluationResult(BagAttribute.createEmptyBag(attributeType));
}
private boolean isConditionMet()
{
if (designatorType != AttributeDesignator.ENVIRONMENT_TARGET))
return true;
if (! attributeId.toString().equals("processor-load"))
return true;
if (! attributeType.toString().equals(IntegerAttribute.identifier))
return true;
return false;
}
答案 2 :(得分:1)
我会为条件创建一个单独的方法。
private boolean shouldCreateEmptyBag(...){
return (designatorType != AttributeDesignator.ENVIRONMENT_TARGET) ||
(! attributeId.toString().equals("processor-load")) ||
(! attributeType.toString().equals(IntegerAttribute.identifier)) || ...
}
然后:
if(shouldCreateEmptyBag(...)){
return new EvaluationResult(BagAttribute.
createEmptyBag(attributeType));
}
答案 3 :(得分:1)
我更喜欢第一个 - 我看到太多人在一个陈述中有多个人时会让他们的操作员感到困惑。
答案 4 :(得分:1)
if (isTest1(designatorType) || isTest2(attributeId) || isTest3(attributeType)){
return new EvaluationResult(BagAttribute.createEmptyBag(attributeType));
}
答案 5 :(得分:1)
这两个代码都是一样的。第一个更清楚,并且由彼此独立的条件分开。但第二个只是这些条件的组合。 IMO第一个更灵活,更容易理解。如果您将来做出任何改变,将更容易理解改变的地方和改变的地方。