Una corrección de error reciente me obligó a revisar el código escrito por otros miembros del equipo, donde encontré esto (es C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Ahora, permitiendo que haya una buena razón para todos esos lanzamientos, esto todavía parece muy difícil de seguir. Hubo un pequeño error en el cálculo y tuve que desenredarlo para solucionar el problema.
Conozco el estilo de codificación de esta persona de la revisión de código, y su enfoque es que más corto es casi siempre mejor. Y, por supuesto, hay valor allí: todos hemos visto cadenas innecesariamente complejas de lógica condicional que podrían arreglarse con unos pocos operadores bien ubicados. Pero es claramente más experto que yo en seguir cadenas de operadores concentrados en una sola declaración.
Esto es, por supuesto, en última instancia, una cuestión de estilo. Pero, ¿se ha escrito o investigado algo sobre el reconocimiento del punto en el que luchar por la brevedad del código deja de ser útil y se convierte en una barrera para la comprensión?
El motivo de los casts es Entity Framework. El db necesita almacenar estos como tipos anulables. ¿Decimal? no es equivalente a Decimal en C # y necesita ser lanzado.
CostOut
es igual a Double.Epsilon
, y por lo tanto es mayor que cero. Pero (decimal)CostOut
es en ese caso cero, y tenemos una división por cero error. El primer paso debería ser obtener el código correcto , lo cual creo que no lo es. Hazlo correctamente, crea casos de prueba y luego hazlo elegante . El código elegante y el código breve tienen mucho en común, pero a veces la brevedad no es el alma de la elegancia.