Una recente correzione di bug mi ha richiesto di esaminare il codice scritto da altri membri del team, dove l'ho trovato (è C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Ora, ammesso che ci sia una buona ragione per tutti quei cast, questo sembra ancora molto difficile da seguire. Si è verificato un errore minore nel calcolo e ho dovuto districarlo per risolvere il problema.
Conosco lo stile di codifica di questa persona dalla revisione del codice e il suo approccio è che il più breve è quasi sempre meglio. E ovviamente c'è valore lì: abbiamo visto tutti catene di logica condizionale inutilmente complesse che potrebbero essere riordinate con pochi operatori ben posizionati. Ma è chiaramente più abile di me nel seguire catene di operatori stipate in un'unica affermazione.
Questo è, ovviamente, in definitiva una questione di stile. Ma qualcosa è stato scritto o studiato per riconoscere il punto in cui la ricerca della brevità del codice smette di essere utile e diventa una barriera alla comprensione?
Il motivo del cast è Entity Framework. Il db deve memorizzarli come tipi nullable. Decimale? non è equivalente a Decimale in C # e deve essere lanciato.
CostOut
sia uguale a Double.Epsilon
, e quindi sia maggiore di zero. Ma (decimal)CostOut
è in questo caso zero e abbiamo una divisione per zero errori. Il primo passo dovrebbe essere quello di ottenere il codice corretto , che penso non lo sia. Ottenerlo corretto, creare casi di test e quindi renderlo elegante . Codice elegante e codice breve hanno molto in comune, ma a volte la brevità non è l'anima dell'eleganza.