Nach einer kürzlichen Fehlerbehebung musste ich den von anderen Teammitgliedern geschriebenen Code durchgehen, wobei ich Folgendes fand (es ist C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Wenn man bedenkt, dass es für all diese Darsteller einen guten Grund gibt, scheint es immer noch sehr schwierig zu sein, dem zu folgen. Es gab einen kleinen Fehler in der Berechnung und ich musste ihn entwirren, um das Problem zu beheben.
Ich kenne den Codierungsstil dieser Person aus der Codeüberprüfung, und sein Ansatz ist, dass kürzer fast immer besser ist. Und da gibt es natürlich einen Wert: Wir haben alle unnötig komplexe Ketten bedingter Logik gesehen, die mit ein paar gut platzierten Operatoren aufgeräumt werden könnten. Aber er ist eindeutig geschickter als ich, wenn es darum geht, Bedienerketten zu einer einzigen Aussage zusammenzufassen.
Dies ist natürlich letztendlich eine Frage des Stils. Wurde jedoch irgendetwas geschrieben oder erforscht, um den Punkt zu erkennen, an dem das Streben nach Kürze des Codes nicht mehr nützlich ist und zum Hindernis für das Verständnis wird?
Der Grund für die Besetzungen ist Entity Framework. Die Datenbank muss diese als nullfähige Typen speichern. Dezimal? ist nicht gleichbedeutend mit Decimal in C # und muss umgewandelt werden.
CostOut
ist gleich Double.Epsilon
und ist daher größer als Null. Ist (decimal)CostOut
aber in diesem Fall Null, und wir haben einen Division durch Null-Fehler. Der erste Schritt sollte darin bestehen, den Code richtig zu machen , was meiner Meinung nach nicht der Fall ist. Machen Sie es richtig, machen Sie Testfälle und machen Sie es dann elegant . Eleganter Code und kurzer Code haben vieles gemeinsam, aber manchmal ist Kürze nicht die Seele der Eleganz.