Мне было интересно, какой тип кода мне написать:
public BigDecimal getItemSubTotal(BigDecimal quantity) {
return getBasePrice().multiply(quantity).multiply(getRentalAdjustment()).add(getOtherAdjustments());
}
ИЛИ
public BigDecimal getItemSubTotal(BigDecimal quantity) {
BigDecimal basePrice = getBasePrice();
BigDecimal rentalAdj = getRentalAdjustment();
BigDecimal otherAdj = getOtherAdjustments();
return basePrice.multiply(quantity).multiply(rentalAdj).add(otherAdj);
}
Какой блок кода лучше, кроме читабельности кода и почему? Какой блок кода займет меньше времени и памяти?




apart from code readability
Единственное различие между этими двумя конкретными примерами состоит в том, что в первом случае вызовы getRentalAdjustment() и getOtherAdjustments() не будут выполняться, если - каким-то образом - вызов BigDecimal.multiply завершится неудачно.
Единственный задокументированный способ отказа BigDecimal.multiply - передача ему нулевого операнда. (И, конечно же, вызов multiply на нулевом приемнике тоже будет, если getBasePrice() вернет null).
Кроме этого, ничего. Все дело в удобочитаемости.
Второй блок кода легче отлаживать, поскольку локальные переменные автоматически отображаются в контексте вашего отладчика.
@leftbit это не повод писать уродливый код. Любой удаленно работающий отладчик не будет бороться с вызовами встроенных методов.
@BoristheSpider Вопрос: «Какой блок кода лучше, кроме читабельности кода и почему?», Поэтому эстетика не затрагивает этот вопрос.
@leftbit удаляет оценочное суждение об уродстве кода, другой способ интерпретации комментария Boristhespider заключается в том, что вы не должны (и не должны) изменять способ написания кода просто для отладчика.
@AndyTurner Конечно, это должно быть правилом. Просто аргументирую здесь еще один аспект ремонтопригодности.
Это может зависеть от ваших требований. Но я хотел бы выделить несколько моментов, например:
@BoristheSpider, как можно сказать, что последний пункт не правильный. Каждая ссылка в java занимает 4 байта памяти. БЮР ссылка на сайт
Это не так просто. Это зависит от типа машины (32/64) и от того, используются ли сжатые ссылки.
Учитывая:
Я бы выбрал:
public BigDecimal getItemSubTotal(BigDecimal quantity) {
return getBasePrice()
.multiply(quantity)
.multiply(getRentalAdjustment())
.add(getOtherAdjustments());
}
Добавьте несколько разрывов строки в первом случае, и вы сделаете его более читабельным.