Следующая вещь, которая приходит в голову - это то, что переменная thisAmount теперь лишняя. Таким образом можно избавиться от нее, применив рифэкторинг Replace Temp with Query (120).
  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.


В начало | предыдущая | следующая