it-swarm.com.de

ob und sonst oder ob und zurück?

Ich habe eine Java -Methode mit einem ungültigen Rückgabetyp, die eine Bedingung überprüft. Sie macht etwas im Falle von wahr und etwas anderes im Falle von falscher, typischer if/else-Struktur, ist aber mögliche Verwendung Nur der if-Block mit einer leeren Rückgabe am Ende und das Weglassen des else-Blocks, der seinen Inhalt mit einer Einrückungsstufe weniger platziert. Ich kenne die Auswirkungen der Verwendung der einen oder anderen Form nicht. Ist eine davon eine schlechte Praxis? das eine oder andere ist eine persönliche Wahl?

// 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

Es hängt von der Semantik Ihres Codes ab, ob der else-Zweig der Punkt der Methode ist, d. H. Nach dem benannt ist, was im else-Zweig geschieht. Die frühe Rückgabe ist wahrscheinlich korrekt, insbesondere wenn der erste Teil eine Art Prüfung ist.

Wenn andererseits die beiden Zweige beide mit der Methodenfunktionalität zusammenhängen, ist die Verwendung von if/else sinnvoller.

ex.

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

vs.

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

wenn der Code mit der Semantik Ihrer Methode übereinstimmt, ist das Lesen einfacher.

6
esoterik

Wenn "etwas" und "anderes" einfach, unkompliziert und verständlich sind, spielt es keine Rolle, da beide funktionieren.

// 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;
}

Wenn jedoch "etwas" oder "anderes" komplex und schwer zu verstehen ist, spielt es keine Rolle, da beide fehlschlagen, und die Lösung besteht darin, es in etwas so einfaches umzugestalten, dass der Code wieder auf den ersten Fall zurückgeht.

// 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