12 Stimmen

Welcher Kodierungsstil ist besser?

Während einer Codeüberprüfung hat ein erfahrener Entwickler einige Verschachtelungen in meinem Code bemängelt. Er schlug vor, einen bool-Wert zu setzen, damit ich nie mehr als eine Verschachtelungsebene habe. Ich denke, dass mein Code besser lesbar ist, aber ich möchte die Meinung anderer Entwickler dazu hören. Welcher Stil ist besser? Ist seine spontane Abneigung gegen Verschachtelungen begründet?

Nachstehend finden Sie einige vereinfachte Code-Beispiele.

Verschachtelt:

If(condition1)
{
    If(condition2)
    {
        if(condition3)
        {
            return true;
        }
        else
        {
            log("condition3 failed");
        }
    else
    {
        log("condition2 failed")
    }
}
else
{
    log("condition1 failed")
}

return false;

oder

Bool Getrieben:

bool bRC = false;

bRC = (condition1);
if(brc)
{
    bRC = (condition2);
}
else
{
    log("condition1 failed");
    return false;
}

if(bRC)
{
    bRC = (condition3);
}
else
{
    log("condition2 failed");
    return false;
}

if(bRC)
{
    return true;
}
else
{
    log("condition3 failed");
    return false;
}

1voto

treznik Punkte 7725

Mir gefällt beides nicht. Wenn Sie so viele Nester haben, stimmt etwas nicht. Im Falle einer Formularvalidierung oder etwas, das in der Tat so etwas erfordert, versuchen Sie, etwas zu finden, das modularer oder kompakter ist.

Ein Beispiel wäre ein Array, das die Bedingungen enthält, durch die Sie mit einem while iterieren und bei Bedarf drucken/unterbrechen.

Es gibt zu viele Implementierungen, die von Ihren Bedürfnissen abhängen, so dass es sinnlos wäre, einen Beispielcode zu erstellen.

Als Faustregel gilt: Wenn Ihr Code zu kompliziert aussieht, ist er schlecht :). Versuchen Sie, ihn zu überdenken. Wenn man sich an die Regeln der Kodierung hält, wird der Code in den meisten Fällen viel ästhetischer und kürzer, und natürlich auch intelligenter.

0voto

THX-1138 Punkte 20552

Der Code soll das Problem in einer vorgegebenen Sprache wiedergeben. Daher behaupte ich, dass beide Schnipsel "besser" sein können. Es kommt auf das zu modellierende Problem an. Ich vermute allerdings, dass keine der beiden Lösungen mit dem eigentlichen Problem übereinstimmen wird. Wenn Sie reale Begriffe anstelle von Bedingung1,2,3 einsetzen, könnte sich der "beste" Code völlig verändern.
Ich vermute, es gibt eine bessere (3d) Möglichkeit, das alles zusammen zu schreiben.

0voto

devMomentum Punkte 433
if( condition1 && condition2 && condition3 )
    return true;

log(String.Format("{0} failed", !condition1 ? "condition1" : (!condition2 ? "condition2" : "condition3")));
return false;

Auf diese Weise müssen Sie nicht viele Codezeilen nur für die Protokollierung sehen. Und wenn alle Ihre Bedingungen wahr sind, verschwenden Sie keine Zeit damit, sie auszuwerten, falls Sie protokollieren müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X