2011-07-04 6 views
0

あなたは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)); 

このようにそれを書き直すほうがよいのではないだろうおそらく非常に主観的ですが、私はまだ誰かが有効な答えを与えることを願っています:-)。

+1

これは主観的な質問ですが、メソッドのreturn文の数を減らすために2番目のオプションを使用します。 – MByD

+0

私の2セントは、後者が理解しやすいことです。前者は目が簡単ですが、後者の方がいいです。 – Dois

答えて

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; 
} 
+1

あなたはそれを悪化させました。 – EJP

+0

一方では間接指示の余分なレベルですが、他方では結果が常に同じであることがより明確です。 – SJuan76

2

全く混乱しません。同じ事後条件(結果)につながる3つの独立した前提条件があります。

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)); 
} 
1

私は最初のものを好む - 私は1つの文では、それらの倍数があるときにあまりにも多くの人々が彼らの事業者が混乱してき見てきました。

1
if (isTest1(designatorType) || isTest2(attributeId) || isTest3(attributeType)){ 
    return new EvaluationResult(BagAttribute.createEmptyBag(attributeType)); 
} 
1

これらのコードはどちらも同じです。最初はもっと明確で、互いに独立した条件で分かれています。しかし、第2のものは、これらの条件の組み合わせのみです。 IMOは、最初の方が柔軟性があり理解できるものです。将来変更した場合は、変更する場所と変更する場所を理解しやすくなります。

関連する問題