Java 哪一个在可读性方面更好?
如果必须检查3个条件,并且在某种情况下返回相同的值,如本例所示:Java 哪一个在可读性方面更好?,java,Java,如果必须检查3个条件,并且在某种情况下返回相同的值,如本例所示: if (designatorType != AttributeDesignator.ENVIRONMENT_TARGET) return new EvaluationResult(BagAttribute. createEmptyBag(attributeType)); if (! attrib
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));
这可能是非常主观的,但我仍然希望有人能给出一个有效的答案:-)。一点也不令人困惑。您有三个独立的前置条件,它们导致相同的后置条件(result)。我将为该条件创建一个单独的方法
private boolean shouldCreateEmptyBag(...){
return (designatorType != AttributeDesignator.ENVIRONMENT_TARGET) ||
(! attributeId.toString().equals("processor-load")) ||
(! attributeType.toString().equals(IntegerAttribute.identifier)) || ...
}
然后:
我更喜欢第一个-我见过太多人在一个语句中有多个运算符时会把运算符弄糊涂。这两个代码都是相同的。第一种是更清晰的,由相互独立的条件分开。但第二个问题只是这些条件的结合。在国际海事组织,第一个更灵活,更容易理解。如果您将来做了任何更改,那么您将更容易理解更改的位置和更改的内容。这是一个主观问题,但我将使用第二个选项来减少方法中返回语句的数量。我的2美分是后者更容易理解,前者更容易看,但我会选择后者。一方面,这是一个额外的间接层次,另一方面,更清楚的是,结果总是一样的。
if (isTest1(designatorType) || isTest2(attributeId) || isTest3(attributeType)){
return new EvaluationResult(BagAttribute.createEmptyBag(attributeType));
}
if(shouldCreateEmptyBag(...)){
return new EvaluationResult(BagAttribute.
createEmptyBag(attributeType));
}
if (isTest1(designatorType) || isTest2(attributeId) || isTest3(attributeType)){
return new EvaluationResult(BagAttribute.createEmptyBag(attributeType));
}