1. Python / Говнокод #11732

    −91

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    if value == '' or value == None or value == False or value == 0:
        ...
    
    if count(data) <= 0:
        ...
    
    # так же он еще умеет рефакторить это
    if post_data is None:
        ...
    # вот в это
    if not post_data:
        ...

    Пара примеров, как у нас в проекте "кодит" товарищ из Индии

    Запостил: larikov, 09 Сентября 2012

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

    • Чувак напрягся и отрефакторил первый if в
      if value in ['', None, False, 0]:
          ...
      Ответить
    • показать все, что скрытоif post_data is None:
      и
      if not post_data:

      одинаковой говнистости конструкции.
      Ответить
      • if post_data is None
        В чем говно?
        Ответить
      • Говна в них нет, они просто будут давать разные результаты. if not post_data будет возвращать True при: http://docs.python.org/library/stdtypes.html#truth-value-testing.
        if post_data is None только если post_data это экземпляр объекта None.
        Не стоит писать хуйню.
        Ответить
        • "Одинаковой степени говнистости" не значит что оба говно.
          Значит то оба НЕ говно.
          Вот нахрена нужно "рефакторить" одну конструкцию в другую, если:
          1. Они дают неэквивалентные результаты.
          2. По написанию и эффективности не сильно отличаются.

          Я понимаю
          x = [1, 2, 3, 4, 5, 6, 7, 8, ..., 100]
          отрефакторить в
          x = [i for i in range(1,101)]

          Но заменить "x is None" на "not x" это не рефакторинг, а хуйня какая-то.
          Ответить
          • [зануда]
            >x = [i for i in range(1,101)]
            Что рефакторится в x = range(1,101) потому что range() возвращает список в отличие от xrange().
            [/зануда]

            >Но заменить "x is None" на "not x" это не рефакторинг, а хуйня какая-то.
            Если x может принимать эквивалентно ложные значения помимо None. Если не может, то разницы не будет.
            Ответить
            • Хотя, конечно, "Явное лучше неявного", то бишь явная проверка на None предпочтительней.
              Ответить
            • В данном конкретном случае 0 является валидным значением в post_data. Поэтому
              > Но заменить "x is None" на "not x" это не рефакторинг, а хуйня какая-то.
              Ответить
          • <...>Вот нахрена нужно "рефакторить" одну конструкцию в другую<...>
            В этом и суть поста, иначе ОП бы об этом и не упомянул.
            Ответить
            • > Вот нахрена нужно "рефакторить" одну конструкцию в другую
              Рефакторилка чесалась.
              Ответить
    • > if value == '' or value == None or value == False or value == 0:
      Тут, вполне возможно, источник говна выше по течению (т.е., код, который присваивает такие разные значения), а это - уже калоуловитель.

      > if count(data) <= 0:
      Устойчивый код, на случай если вдруг count отрицателен. (это не совсем сарказм, скорее объяснил бы привычкой, оставшейся от C)
      Ответить
      • >if value == '' or value == None or value == False or value == 0:
        if not value:
        Ответить
    • if value not in ['', None, False, 0]:
      оптимизируем
      Ответить

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