Нещодавнє виправлення помилок вимагало від мене перегляду коду, написаного іншими членами команди, де я знайшов це (це C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Тепер, якщо є вагома причина для всіх цих ролей, це все ще здається дуже важким. У розрахунку виникла незначна помилка, і мені довелося її розв’язати, щоб виправити проблему.
Я знаю стиль кодування цієї людини з огляду коду, і його підхід полягає в тому, що коротше майже завжди краще. І звичайно, тут є цінність: ми всі бачили зайво складні ланцюги умовної логіки, які можна було б привласнити кількома добре розміщеними операторами. Але він, очевидно, більш спритний, ніж я, коли наступні ланцюги операторів забиті в одне твердження.
Це, звичайно, питання стилю. Але чи було написано чи досліджено щось, щоб визнати точку, коли прагнення до короткості коду перестає бути корисним і стає бар'єром для розуміння?
Причиною кастингу є Entity Framework. DB повинен зберігати їх як нульові типи. Десяткові? не еквівалентно десятковому знаку в C # і його потрібно надати.
CostOut
це дорівнює Double.Epsilon
, а тому більше нуля. Але (decimal)CostOut
в цьому випадку дорівнює нулю, і ми маємо ділення на нульову помилку. Першим кроком має стати правильний код , що, на мою думку, це не так. Правильно виправте, зробіть тестові кейси, а потім зробіть його елегантним . Елегантний і короткий код мають багато спільного, але іноді стислість - це не душа елегантності.