| Перенос расчёта задолженности | Страница 21 |
public String statement() {
double totalAmount = 0;
int frequentRenterPoints = 0;
Enumeration rentals = this.rentals.elements();
String result = "Rental Record for "+getName()+"\n";
while( rentals.hasMoreElements()) {
double thisAmount = 0;
Rental each = ( Rental) rentals.nextElement();
// add frequent renter points
frequentRenterPoints++;
// add bonus for a two day new release rental
if( each.getMovie().getPriceCode()==Movie.NEW_RELEASE &&
each.getDaysRented()>1) frequentRenterPoints++;
// show figures for this rental
result += "\t"+each.getMovie().getTitle()+"\t"+
String.valueOf( each.getCharge())+"\n";
totalAmount += each.getCharge();
}
// add footer lines
result += "Amount owned is "+String.valueOf( totalAmount)+"\n";
result += "You earned "+String.valueOf( frequentRenterPoints)+
" frequent renter points";
return result;
}
После внесения измений я снова компилирую и запускаю тесты, чтобы убедиться,
что всё работает.
Я предпочитаю избавляться от временных переменных, насколько это возможно.
Временные переменные часто вызывают проблемы, поскольку большое количество
параметров передаётся туда-сюда без особой необходимости, и легко можно
забыть, зачем они изначально были нужны. Особенно часто они прячутся
в длинных методах. Разумеется, платой за избавление от временных
переменных будет быстродействие; здесь сумма задолженности считается два раза.
Однако это довольно просто оптимизировать в классе Rental, и оптимизация может
оказаться более эффективной, если код будет лучше организован. Я собираюсь
уделить больше внимания проблеме производительности в разделе "Рефакторинг и
производительность" на странице 69.
Оглавление | << страница 20 | страница 22 >>