在Java中用于嵌套函数的编码实践

时间:2019-01-04 11:28:51

标签: java

我想知道应该编写哪种类型的代码:

public BigDecimal getItemSubTotal(BigDecimal quantity) {
        return getBasePrice().multiply(quantity).multiply(getRentalAdjustment()).add(getOtherAdjustments());
}

OR

public BigDecimal getItemSubTotal(BigDecimal quantity) {
    BigDecimal basePrice = getBasePrice();
    BigDecimal rentalAdj = getRentalAdjustment();
    BigDecimal otherAdj = getOtherAdjustments();
    return basePrice.multiply(quantity).multiply(rentalAdj).add(otherAdj);
}

除了代码可读性之外,哪个代码块更好?为什么? 哪个代码块将花费更少的时间和内存?

3 个答案:

答案 0 :(得分:4)

  

除了代码可读性

这两个特定示例之间的唯一区别是,在第一种情况下,如果getRentalAdjustment()调用失败,则不会进行对getOtherAdjustments()BigDecimal.multiply的调用。

BigDecimal.multiply失败的唯一记录方法是将其传递给空操作数。 (而且,当然,如果multiply返回null,也将在null接收者上调用getBasePrice()

除此之外,什么都没有。这完全取决于可读性。

答案 1 :(得分:0)

给出:

  1. 由于在复杂性方面没有显着差异,因此内存和时间的好处可以忽略不计;
  2. 正如@AndyTurner所提到的-函数的执行顺序不同,并且一个函数的失败会阻止后续调用的执行。
  3. 声纳/划线工具不会喜欢本地不必要的变量;
  4. 某些整理工具可能会将长行视为问题:

我会选择:

public BigDecimal getItemSubTotal(BigDecimal quantity) {
        return getBasePrice()
            .multiply(quantity)
            .multiply(getRentalAdjustment())
            .add(getOtherAdjustments());
}

答案 2 :(得分:-1)

这可能取决于您的要求。但我想强调一些要点,例如:

  • 第二个比第一个更具可读性
  • 在第二个中,您将能够为每个调用执行异常处理,但是在第一个中,您不能执行相同的操作。
  • 在Java中,每个变量创建都占用4个字节(因为变量引用是整数值,而在Java中,整数占用4个字节)。所以就记忆而言,第一个要比第二个好