Uma correção recente de bug exigia que eu revisasse o código escrito por outros membros da equipe, onde encontrei isso (é C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Agora, permitindo que haja uma boa razão para todos esses elencos, isso ainda parece muito difícil de seguir. Houve um pequeno erro no cálculo e tive que desembaraçar para corrigir o problema.
Conheço o estilo de codificação dessa pessoa a partir da revisão de código, e sua abordagem é que menor é quase sempre melhor. E, claro, há valor lá: todos nós vimos cadeias desnecessariamente complexas de lógica condicional que podem ser arrumadas com alguns operadores bem posicionados. Mas ele é claramente mais hábil do que eu em seguir cadeias de operadores amontoados em uma única declaração.
É claro que isso é uma questão de estilo. Mas alguma coisa foi escrita ou pesquisada para reconhecer o ponto em que a busca pela brevidade do código deixa de ser útil e se torna uma barreira à compreensão?
O motivo dos lançamentos é o Entity Framework. O banco de dados precisa armazená-los como tipos anuláveis. Decimal? não é equivalente a decimal em c # e precisa ser convertido.
CostOut
seja igual a Double.Epsilon
e, portanto, seja maior que zero. Mas (decimal)CostOut
, nesse caso, é zero, e temos uma divisão por erro zero. O primeiro passo deve ser o de corrigir o código , o que acho que não é. Corrija, faça casos de teste e, em seguida, torne-o elegante . Código elegante e código breve têm muito em comum, mas às vezes a brevidade não é a alma da elegância.