Jawa / Говнокод #12324 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
if (!formules.isEmpty()) {
    for (String tag : formules) {
    .....
    // и вот здесь шедевр:
    }
    // а здесь ничего нет
}

Не гоняем цикл вхолостую

Запостил: alopen alopen, (Updated )

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

  • Мне как-то бывалый явист рассказывал, что так и надо. Но я не помню, почему.
    Ответить
    • bormand только что #
      > Мне как-то бывалый явист рассказывал, что так и надо.
      Ну может быть в древней-древней яве что-то шло не так? А вообще пустая коллекция это же вполне нормальный случай для фора, почему для нее нужны особые подходы?

      P.S. Другое дело если там null. Может быть он проверку на нулл предлагал?
      Ответить
      • Честно - я не знаю, возможно, аргументом было то, что итератор не создасться. Но, я просто не помню, а найти первоисточник уже нет возможности.
        Ответить
        • Да, разве что пустой итератор не создастся. Экономия на спичках, достойная похапешников.
          Ответить
          • Для пустой коллекции создастся итератор, который в ответ на iterator.hasNext() сразу вернёт false.
            Вот этот тест отрабатывает успешно:
            @Test
                public void testEmptyCollection() throws Exception {
                    Collection<String> strings = new ArrayList<String>(0);
                    
                    assertTrue(strings.isEmpty());
                    
                    for (String s: strings) {
                        fail("Should never reach this line");
                    }
                }
            Так что тут не экономия, а наоборот — расточительство.
            Ответить
            • Это понятно, но будет вызван strings.iterator(), который аллоцирует кусок памяти под итератор, единственная цель которого - вернуть false. strings.isEmpty() память не аллоцирует. Так некоторая "экономия" всё же есть.
              Другое дело, что коллекции бывают пусты довольно редко, так что вместо профита получаем дополнительную проверку, и в среднем код быстрее не станет, скорее наоборот.
              Ответить
                • Ну видимо сделали по аналогии с for (int i=0; i<10; i++), в котором переменная явно та же самая на всех итерациях.
                  Ответить
  • Аффтар индус, не иначе - чистейшей воды прибыль
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8