Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪一个在可读性方面更好?_Java - Fatal编程技术网

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

Java 哪一个在可读性方面更好?,java,Java,如果必须检查3个条件,并且在某种情况下返回相同的值,如本例所示: if (designatorType != AttributeDesignator.ENVIRONMENT_TARGET) return new EvaluationResult(BagAttribute. createEmptyBag(attributeType)); if (! attrib

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

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

一点也不令人困惑。您有三个独立的前置条件,它们导致相同的后置条件(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));
}