Niedawna poprawka wymagała ode mnie przejścia kodu napisanego przez innych członków zespołu, gdzie znalazłem to (to C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Teraz, biorąc pod uwagę, że istnieje dobry powód dla wszystkich tych obsad, nadal wydaje się to bardzo trudne do naśladowania. Wystąpił drobny błąd w obliczeniach i musiałem go rozplątać, aby naprawić problem.
Znam styl kodowania tej osoby z przeglądu kodu, a jego podejście jest takie, że krótszy jest prawie zawsze lepszy. I oczywiście jest w tym wartość: wszyscy widzieliśmy niepotrzebnie złożone łańcuchy logiki warunkowej, które można uporządkować za pomocą kilku dobrze umiejscowionych operatorów. Ale jest wyraźnie bardziej biegły ode mnie w śledzeniu łańcuchów operatorów wtłoczonych w jedno stwierdzenie.
Jest to oczywiście kwestia stylu. Ale czy coś zostało napisane lub zbadane na temat rozpoznania punktu, w którym dążenie do zwięzłości kodu przestaje być przydatne i staje się barierą dla zrozumienia?
Powodem rzutowania jest Entity Framework. Baza danych musi przechowywać je jako typy zerowalne. Dziesiętny? nie jest równoważny z Decimal w C # i musi zostać obsadzony.
CostOut
jest równy Double.Epsilon
, a zatem większy niż zero. Ale (decimal)CostOut
w tym przypadku wynosi zero i mamy błąd dzielenia przez zero. Pierwszym krokiem powinno być poprawienie kodu , co moim zdaniem nie jest. Popraw to, twórz przypadki testowe, a następnie spraw, by były eleganckie . Elegancki kod i krótki kod mają ze sobą wiele wspólnego, ale czasem zwięzłość nie jest duszą elegancji.