哪一个在可读性方面更好?

时间:2011-07-04 07:43:25

标签: java

如果必须检查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));

这可能是非常主观的,但我希望有人能给出一个有效的答案: - )。

6 个答案:

答案 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第一个更灵活,更容易理解。如果您将来做出任何改变,将更容易理解改变的地方和改变的地方。