9 Stimmen

Wie kann man einem Entwickler erklären, dass das Hinzufügen zusätzlicher if - else if-Bedingungen kein guter Weg ist, um die Lesbarkeit zu "verbessern"?

Kürzlich bin ich auf den folgenden C++-Code gestoßen:

if (a)
{
  f();
}
else if (b)
{
  f();
}
else if (c)
{
  f();
}

Dabei sind a, b und c unterschiedliche Bedingungen, die nicht sehr kurz sind.

Ich habe versucht, den Code zu ändern:

if (a || b || c)
{
  f();
}

Der Autor war jedoch dagegen und meinte, dass meine Änderung die Lesbarkeit des Codes beeinträchtigen würde. Ich hatte zwei Argumente:

1) Man sollte die Lesbarkeit nicht erhöhen, indem man eine Verzweigungsanweisung durch drei ersetzt (obwohl ich wirklich bezweifle, dass es möglich ist, den Code lesbarer zu machen, indem man else if anstelle von || verwendet).

2) Es ist nicht der schnellste Code, und kein Compiler wird ihn optimieren.

Aber meine Argumente haben ihn nicht überzeugt.

Was würden Sie einem Programmierer sagen, der einen solchen Code schreibt?

Glauben Sie, dass ein komplexer Zustand eine Entschuldigung für die Verwendung von sonst wenn anstelle von OR ?

21voto

Dieser Code ist überflüssig. Er ist anfällig für Fehler.

Wenn Sie Folgendes ersetzen würden f(); Irgendwann besteht bei etwas anderem die Gefahr, dass man etwas übersieht.


Es kann jedoch ein Grund dafür sein, dass diese drei Körper eines Tages anders werden könnten, und Sie bereiten sich auf diese Situation vor. Wenn die Wahrscheinlichkeit groß ist, dass es dazu kommt, kann es in Ordnung sein, etwas in dieser Art zu tun. Aber ich würde dazu raten, dem YAGNI-Prinzip (You Ain't Gonna Need It) zu folgen. Ich kann nicht sagen, wie viel aufgeblähter Code geschrieben wurde, nicht weil er wirklich gebraucht wurde, sondern nur in der Erwartung, dass er morgen gebraucht wird. Die Praxis zeigt, dass dies während der gesamten Lebensdauer einer Anwendung keinen Nutzen bringt, sondern den Wartungsaufwand stark erhöht.


Wie Sie es Ihrem Kollegen erklären können, wurde bereits mehrfach erörtert. Siehe hier:

Wie sagt man jemandem, dass er schlechten Code schreibt?

Wie können Sie Ihren Kollegen gegenüber rechtfertigen, dass sie miserablen Code produzieren?

Wie gehen Sie mit minderwertigem Code von Teammitgliedern um?

"Mentor" eines älteren Programmierers oder Kollegen ohne Beleidigung

12voto

Lieven Keersmaekers Punkte 55277

Ersetzen Sie die drei komplexen Bedingungen durch eine Funktion und machen Sie deutlich, warum f() ausgeführt werden sollte.

bool ShouldExecute; { return a||b||c};
...
if ShouldExecute {f();};

5voto

phkahler Punkte 5602

Da die Bedingungen lang sind, lassen Sie ihn dies tun:

if ( (aaaaaaaaaaaaaaaaaaaaaaaaaaaa)
  || (bbbbbbbbbbbbbbbbbbbbbbbbbbbb)
  || (cccccccccccccccccccccccccccc) )
{
    f();
}

Ein guter Compiler könnte all dies in denselben Code umwandeln, aber das oben genannte Konstrukt ist für diese Art von Dingen üblich. 3 Aufrufe der gleichen Funktion sind hässlich.

2voto

Mike Dunlavey Punkte 39339

Leistung ist hier kein Thema.

Viele wickeln sich in die Fahne der "Lesbarkeit" ein, obwohl das eigentlich nur eine Frage des individuellen Geschmacks ist.

Manchmal mache ich es auf die eine Art, manchmal auf die andere. Worüber ich nachdenke, ist -

"Welcher Weg wird es einfacher machen, die Art von Änderungen zu bearbeiten, die in Zukunft vorgenommen werden müssen?"

Kümmern Sie sich nicht um die kleinen Dinge.

1voto

Anders Abel Punkte 65873

Ich denke, dass Ihre beiden Argumente (wie auch der Punkt von Developer Art über die Wartbarkeit) stichhaltig sind, aber anscheinend ist Ihr Diskussionspartner nicht für eine Diskussion offen.

Ich habe das Gefühl, dass Sie diese Diskussion mit jemandem führen, der als älter eingestuft wird. Wenn das der Fall ist, haben Sie einen Krieg zu führen und dies ist nur eine kleine Schlacht, die Sie nicht unbedingt gewinnen müssen. Anstatt Zeit damit zu verbringen, über diese Sache zu streiten, versuchen Sie, Ihre Ergebnisse (die weitaus besser sein werden als die Ihres Diskussionspartners, wenn er diese Art von Kode schreibt) für sich selbst sprechen zu lassen. Achten Sie nur darauf, dass Ihre Arbeit gewürdigt wird und nicht die des ganzen Teams oder eines anderen.

Das ist wahrscheinlich nicht die Art von Antwort, die Sie auf die Frage erwartet haben, aber ich habe das Gefühl, dass mehr dahintersteckt als nur dieser kleine Streit...

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