前几天我正在阅读Tom Hawtin - tackline's profile,我读了这条诫命:
请不要给空值赋予意义。投掷NPE。
我想知道关于第一句话的两件事: 为什么
首先,为什么。为什么呢?
其次,如何。让我举个例子:
BigDecimal sales = ...;
BigDecimal cost = ...;
BigDecimal profit = sales.subtract(cost);
// Profit Margin = profit / sales
BigDecimal profitMargin = profit.divide(sales, 20, RoundingMode.HALF_UP);
在这里,我们正在计算利润率。但有时,sales
将为0.因此,在这种情况下:
BigDecimal profitMargin = sales.compareTo(BigDecimal.ZERO) == 0 ? null : profit.divide(sales, 20, RoundingMode.HALF_UP);
我们说当没有销售时profitMargin
为null
。这很有道理,对吗?有更好的解决方案吗?也许你可以说当没有销售时利润率为零,但这并不完全准确。也可以说零销售给你无限的利润空间。但零和无限都无法准确描述零销售利润率。 未定义 效果最佳。这正是null
传达的内容。
这是我可以想象null
具有非常有用的意义的许多情况之一,这些意义可以传达很多信息。
我误解了诫命吗?如果没有null
??