web-dev-qa-db-ja.com

場合は、それ以外の場合、または場合は、戻りますか?

私はJavaメソッドを使用して、条件をチェックするvoid型の戻り値を返します。trueの場合に何かを、falseの場合に他のことを行います。典型的なif/else構造ですが、使用可能です最後に空のリターンがあるifブロックのみで、インデントのレベルを1つ下げてコンテンツを配置するelseブロックを省略します。1つまたは他のフォームを使用することの影響はわかりません。どちらかが個人選挙ですか?

// The first way
private void test(String str) {
    if (str.equals("xxx")) {
        // Do something
    } else {
        // Do other thing
    }
}

// The second way
private void test(String str) {
    if (str.equals("xxx")) {
        // Do something
        return;
    }
    // Do other thing
}
3
Orici

それはコードのセマンティクスに依存します.elseブランチがメソッドのポイントである場合、つまり、elseブランチで何が起こったかにちなんで名前が付けられている場合、特に最初の部分がなんらかのチェックである場合、初期のリターンはおそらく正しいです。

一方、2つのブランチの両方がメソッドの機能に関連している場合、if/elseを使用する方が理にかなっています。

例.

void frob(...)
{
   if(isBlob())
      return; //can't frob a blob
   doFrobbing(...)
}

vs.

void condOp(...)
{
  if(condition)
      conditionalthing();
  else
      otherthing();
}

コードをメソッドのセマンティクスに一致させると、読みやすくなります。

6
esoterik

「何か」と「その他」がシンプルでわかりやすく、理解しやすいものであれば、どちらも機能するので問題ではありません。

// The first way is completely readable
private void test(String str) {
    if (str.equals("xxx")) {
        System.out.println("value is xxx");
    } else {
        System.out.println(str);
    }
    return;
}

// The second way is also readable
private void test(String str) {
    if (str.equals("xxx")) {
        System.out.println("value is xxx");
        return;
    }
    System.out.println(str);
    return;
}

ただし、「何か」または「その他」が複雑で理解しにくい場合は、どちらも失敗するため問題ではありません。解決策は、コードを最初のケースに戻すのに十分なほど単純なものにリファクタリングすることです。

// The first way is completely readable
private void test(String str) {
    if (str.equals("xxx")) {
        doSomething(); // obfuscates the complex code you had before
    } else {
        doOtherThing(); // obfuscates the complex code you had before
    }
    return;
}

// The second way is also readable
private void test(String str) {
    if (str.equals("xxx")) {
        doSomething(); // obfuscates the complex code you had before
        return;
    }
    doOtherThing(); / /obfuscates the complex code you had before
    return;
}
/* 
 * Obviously, real code would have better variable and function names,
 * allowing the reader to understand what is happening.
 * If I care about how we doSomething(), I can investigate that function,
 * but I know that test(String) in some cases does something
 * and in other cases does the other thing, which may be enough
 */
0
Chris G