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

    +69

    1. 1
    foos.removeAll(Collections.singleton(null));

    foos.remove(null)?не, не наш метод.

    Запостил: Lure Of Chaos, 02 Августа 2013

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

    • Вспомнился анекдот про математика и чайник.
      Ответить
      • как сварить часы?
        Ответить
        • Подозреваю, что имелся в виду анекдот про повторное использование: выливаем воду — задача сводится к предыдущей.
          Ответить
          • Вероятно он счел зашкваром сделать GOTO step_2. Потому использовал рекурсию.
            Ответить
        • Что это за анекдот, если не секрет?
          (Если погуглить "как сварить часы" в кавычках, находится только эта страница. Видимо, здесь знают толк в варке часов.)
          Ответить
          • У меня есть дедовские? напольные часы из метала. Однажды они упали с чердака. Шев разошелся и пришлось варить. Идут до сих пор.
            Ответить
            • У меня есть настенные часы на батарейках с китайским механизмом на пластиковых шестеренках. Работают уже несколько лет, батарейки хватает на год-полтора. В самом простом варианте стоят евро 5.
              Ответить
          • это не анекдот, это байка про рассеянного ученого
            Ответить
          • Говнокод + Кулинария = ?
            Ответить
            • Говнокод + Кулинария = Сущий ад
              Если воспринимать рецепты блюд как скрипты для поваров, то, наговнокодив в них, можно неплохо навредить.
              Взять хотя бы тот случай, когда забыли написать, что в кастрюлю надо налить воды перед варкой сгущёнки, и пришлось изымать из продажи все экземпляры книги с рецептами.
              Ответить
          • Закроют теперь говнокод за пропаганду варки веществ.
            Ответить
    • Где говнокод? Автор, как по книжке, убирает все null'ы из коллекции. Вместо одного.
      Ответить
      • Забавно, но почему-то у коллекции нет метода removeAll с одним элементом, а не с коллекцией. Для удобства могли бы и добавить, чтобы Collections.singleton не юзать...
        Ответить
        • Опять кипячение чайника - сначала гасим газ, выливаем воду...

          А еще какая нибудь польза от Collections.singleton() есть, или только дыры затыкать?

          Мне, как человеку непосвященному, кажется что Collections.singleton(X) это не очень нужная обвертка для X
          Ответить
          • Обычный static factory method, который возвращает лист с одним элементом. Например, есть метод, в котором в качестве аргумента принимается List. Мы хотим передать туда наш один объект. Collections.singleton будет кстати.
            Ответить
            • Ну это и называется затыкать дыры, нет?
              Ответить
      • >Где говнокод?
        Каждый раз создается лишний промежуточный объект с null. Константа - лучше.
        public static <T> Set<T> singleton(T o) {
        	return new SingletonSet<T>(o);
            }

        2 bormand
        >Забавно, но почему-то у коллекции нет метода removeAll с одним элементом, а не с коллекцией
        >removeAll с одним элементом
        Узко мыслите. Нужен с массивом/вараргом.
        Ответить
        • >Нужен с массивом/вараргом.
          Хотя, возможно, я чутка погорячился с универсальностью.
          Проблема в том если делать качественное удаление по массиву - надо проверять длину и если больше N, то всё-равно создавать Set для пущей эффективности. Чтобы отсечь возможные дубликаты, и не получить полный скан O(len(arr)*len(coll)).
          Для одного элемента - разумно. А больше, то сам сделай какую считаешь нужным коллекцию с быстрым contains() и удоляй.
          Ответить
        • Все-же называть говнокодом создание вспомогательного объекта - слишком громко.
          Ответить

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