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

    +70

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

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

    Запостил: alopen, 21 Декабря 2012

    Комментарии (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() память не аллоцирует. Так некоторая "экономия" всё же есть.
                Другое дело, что коллекции бывают пусты довольно редко, так что вместо профита получаем дополнительную проверку, и в среднем код быстрее не станет, скорее наоборот.
                Ответить
                • Почему только похапешники.
                  http://govnokod.ru/11946
                  Вот MS оффициально и смело вводит сомнительные оптимизации "на спичках".
                  Ответить
                  • Ну видимо сделали по аналогии с for (int i=0; i<10; i++), в котором переменная явно та же самая на всех итерациях.
                    Ответить
        • Если бы там был null, был бы NullPointerException
          Ответить
    • Аффтар индус, не иначе - чистейшей воды прибыль
      Ответить
      • Не знаю, как остальным, но мне эта шутка порядком поднадоела
        Ответить

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