Недавнее исправление ошибки требовало от меня просмотра кода, написанного другими членами команды, где я нашел это (это C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Теперь, если есть веская причина для всех этих бросков, это все еще кажется очень трудным для подражания. В вычислении была небольшая ошибка, и мне пришлось распутать ее, чтобы решить проблему.
Я знаю стиль кодирования этого человека по обзору кода, и его подход заключается в том, что чем короче, тем лучше. И, конечно, здесь есть ценность: мы все видели излишне сложные цепочки условной логики, которые можно было бы привести в порядок несколькими удачно расположенными операторами. Но он явно более искусен, чем я, в следующих цепочках операторов, объединенных в одно утверждение.
Это, конечно, в конечном итоге вопрос стиля. Но было ли что-либо написано или исследовано для определения точки, в которой стремление к краткости кода перестает быть полезным и становится барьером для понимания?
Причиной для приведения является Entity Framework. БД должен хранить их как обнуляемые типы. Десятичный? не эквивалентен десятичному в C # и должен быть приведен.
CostOut
, равно Double.Epsilon
, и, следовательно, больше нуля. Но (decimal)CostOut
в этом случае ноль, и у нас есть ошибка деления на ноль. Первый шаг должен состоять в том, чтобы получить правильный код , который я думаю, что это не так. Получите это правильно, сделайте контрольные примеры, и затем сделайте это изящным . Элегантный код и краткий код имеют много общего, но иногда краткость не является душой элегантности.