1. Java / Говнокод #1629

    +73

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    public static List<Record> glueList(List<Record> list) {
    		List<Record> result = new ArrayList<Record>();
    		Record tlr = new Record();
    		boolean isToGlue = false;
    		for (int i = 0; i < list.size(); i++) {
    			if (!isToGlue) {
    				tlr = new Record();
    				tlr = list.get(i).clone();
    			}
    			Date endTime = new Date(list.get(i).getEndTime().getTime() + INSIGNIFICANT_TIME_BREAK);
    			if (list.size() > i + 1 && endTime.compareTo(list.get(i + 1).getStartTime()) >= 0) {
    				isToGlue = true;
    				tlr.setEndTime(list.get(i + 1).getEndTime());
    			} else {
    				isToGlue = false;
    				result.add(tlr);
    			}
    		}
    		return result;
    	}

    1. Два раза создается и не используется объект Record
    2. Для сравнения дат используется метод compareTo вместо методов after/before

    Запостил: intr13, 19 Августа 2009

    Комментарии (16) RSS

    • Большой разницы между
      ! endTime.before(...)
      и
      endTime.compareTo(...) >= ...
      я не вижу, даже пожалуй второй код более ясно выражает мысль. А что касается Record, просто после переписывания кода забыли убрать лишнюю инициализацию.
      Ответить
      • Когда используется after/before, то код становится более читабельнее. Намного удобнее читать английские буковки, чем вспоминать чтовозвращает метод compareTo.

        Как раз и плохо, что забыли...
        Ответить
        • сколько list.size() обычно?
          Ответить
          • в среднем 3
            Ответить
            • тоды нормально
              обычный нормальный код
              можно и понятнее написать конечно но проще закаментить и забыть :)
              Ответить
        • В данном случае after/before требуют отрицания или использования в связке с equals. И в результате вместо нормального is after получаем is not before. А что возвращает метод compareTo() и так надо бы знать, чай не rocket science ;)

          Ну забыли и забыли, обычный баг, в любом проекте таких больше девяти тысяч.
          Ответить
    • Подумаешь record лишний, хотя если много раз вызывать то будет много рекордов лишних а это уже утечка памяти.
      Ответить
      • Не будет утечки - создается новый объект, тут же теряется ссылка, ни с чем не связан -> первый же проход сборщика мусора его съест за милую душу ) разве что фрагментацию памяти можешь получить, но точно не утечку.
        Ответить
    • Java и так жрет памяти много, а вы говорите "просто" забыли убрать лишнюю инициализацию.
      Ответить
    • рЫбятЫ :) давайте жЫть дружна :) Ы

      И не забывать чт баги - это не всегда гавнокод :) а гавнокод - не всегда баги :) Ы
      Ответить

    Добавить комментарий