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.
В начало | предыдущая | следующая