最近的错误修复要求我检查其他团队成员编写的代码,在这里发现了这一点(它是C#):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
现在,有充分的理由进行所有这些强制转换,这仍然很难遵循。计算中有一个小错误,我不得不解开它以解决问题。
我从代码审查中知道了此人的编码风格,他的方法是较短的总是更好。当然,这里还有价值:我们都已经看到了不必要的复杂的条件逻辑链,这些逻辑可以与一些位置合理的运算符一起整理。但是他显然比我更擅长追随运营商,他们陷入了一个单一的问题。
当然,这最终是样式问题。但是,是否有任何关于识别代码简洁性不再有用并成为理解障碍的观点的写作或研究?
进行强制转换的原因是实体框架。数据库需要将它们存储为可空类型。小数?不等同于C#中的Decimal,需要进行强制转换。
CostOut
等于Double.Epsilon
,因此大于零。但是(decimal)CostOut
在那种情况下为零,我们有一个除以零的误差。第一步应该是使代码正确,但我认为并非如此。使其正确,制作测试用例,然后使其优雅。优雅的代码和简短的代码有很多共同点,但是有时简洁不是优雅的灵魂。