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

    +75

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if(false || DEBUG)
        {
          System.out.print("analysis: "+Integer.toBinaryString(analysis));
          System.out.println(", "+WalkerFactory.getAnalysisString(analysis));
        }

    Вычурный способ делать комментарии. Пример может и боян, но зато где: в исходниках API Android 2.2 Froyo.

    Запостил: google-moogle, 04 Декабря 2011

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

    • вот такой гоголь-моголь.
      Ответить
    • >Вычурный способ делать комментарии
      или я не вкурил, или автор не увидел замечательное быть или не быть "false||DEBUG"?
      Ответить
      • Как раз и увидел. Но в этом вся и соль. DEBUG - понятно, а false зачем? Нихт ферштейн. Я - креветко
        Ответить
        • это на тот случай, если не хочется включать дебаг, но хочется получать сообщения в данном месте. меням false на true - и будет нам счастье!
          Ответить
          • тогда уж так(только все равно говно).
            if(DEBUG || ANYWAY)
            Ответить
            • Видимо, есть люди, которые ещё не знают про java.util.logging.
              Перекомпилять приложение чтобы изменить уровень логгирования - это маразм. Проект, над которым я работаю, собирается 15 минут, а потом ещё 10 минут деплоится.
              Ответить
            • а нафига?
              Ответить
              • за тем же фигом зачем и false.
                А вообще, да. Как уже правильно сказали выше, если не осилил логгинг, то ССЗБ.
                Ответить
                • ...
                  if(false || DEBUG) {//section1}
                  ...
                  if(false || DEBUG) {//section2}
                  ...
                  if(false || DEBUG) {//section3}
                  ...


                  Допустим мне надо посмотреть, что твориться во второй секции, при этом меня совсем не интересует, что происходит в 1-й и 3-й. Решение:
                  ...
                  if(false || DEBUG) {//section1}
                  ...
                  if(true || DEBUG) {//section2}
                  ...
                  if(false || DEBUG) {//section3}
                  ...


                  А полноценное логирование нужно далеко не всегда и далеко не везде.
                  ПЫСЫ Кстати, как в данном случае логирование поможет?
                  Ответить
                  • > А полноценное логирование нужно далеко не всегда
                    В java его гораздо проще получить их коробки, чем городить вот такие унылые велосипеды
                    Ответить
                    • > ПЫСЫ Кстати, как в данном случае логирование поможет?
                      может ответите на вопрос?

                      я не противник логгирования. просто есть ситуации, когда оно нафиг не нужно.
                      Ответить
                      • > > в исходниках API Android 2.2 Froyo.
                        > есть ситуации, когда оно нафиг не нужно
                        И это не самый удачный пример такой ситуации.
                        Ответить
                        • мне кажется такая фигня есть в любом крупном проекте. Нечто подобное точно видел в Eclipse. Были бы исходники Idea, наверняка нашли бы что-нить похожее. Я думаю, в данной ситуации просто код не дочистили.
                          Ответить
                  • > как в данном случае логирование поможет
                    Аккуратным выбором уровней логгирования для совершаемых операций. В JUL их более чем дохрена:
                    SEVERE (highest value)
                    WARNING
                    INFO
                    CONFIG
                    FINE
                    FINER
                    FINEST (lowest value)
                    Ответить
                    • все равно не вижу, чем это может помочь
                      Ответить
                      • Если вы хотите мне доказать, что есть гипотетические ситуации, где логгирование не нужно - я не спорю. Просто я не люблю особо философствовать и размышлять гипотетически надо говнокодом. В данной конкретной ситуации код - говно, и это для меня очевидно. Спорить по этому поводу не вижу смысла.
                        Ответить
                        • это не гипотетическая ситуация, а вполне конкретный пример из моей практики.

                          Повторюсь, что я ни в коей мере не утверждаю, что логгирование не нужно. Просто бывают ситуации, когда логгированием не обойтись.

                          П. С. Я никому ничего не доказываю =) Странно, что вы это до сих пор не поняли. Просто надо иногда смотреть на код с другой стороны, надо пытаться понять почему он написан именно так, а не с точки зрения каких-то общих правил и догм. На этом ресурсе бытует мнение, что если что-то сделано не по правилам - то это говно.
                          Ответить
                          • "Просто надо иногда смотреть на код с другой стороны, надо пытаться понять почему он написан именно так, а не с точки зрения каких-то общих правил и догм." - Золотые слова. В рамку, на стену, читать перед сном. Каждому.
                            Ответить
                      • > все равно не вижу, чем это может помочь
                        > if(false || DEBUG) {//section1}
                        LOGGER.fine("holy crap");

                        > if(true || DEBUG) {//section2}
                        LOGGER.info("holy integrals");

                        > if(false || DEBUG) {//section3}
                        LOGGER.fine("holy aliens");
                        Ответить
                        • при этом, в консоли я скорее всего получу кучу info соощений от других логгеров?
                          Ответить
                          • Я к тому, что можно повышать степень важности именно этого сообщения, если нужно.
                            Есть ещё, к примеру, фильтры.
                            А вообще мне приходилось анализировать логи размером в несколько гигабайт: это сложно только на первый взгляд ;).
                            Ответить
                            • мне тоже. и что с того? Почему вам сразу гигабайты видятся?

                              Просто в данной ситуации, я уверен, ни о каких гигабайтах речи и не идет. И вообще логирования тут быть, скорее всего, не должно. Это просто место, которое отладил и забыл.

                              В моем конкретном примере задача состояла в отладке кастомного виджета. Интересовали события focusGained, focusLost, mouseEnter, а также их комбинации. Меняя три булевых флага я сделал это намного быстрее, чем если бы игрался с настройками логирования.
                              Ответить
                              • Ну не знаю, мне кажется, что если уж дебажить нельзя, проще срать всё в info и потом разбираться, что откуда растёт.

                                Просто у меня обычно цикл build - install занимает много времени, дебажиться возможности нет, а проблемы бывают сложные. Да и логгирование уже давно настроено как нужно.

                                Если вам было и удобно и вы работали продуктивно - ваше право. На вкус и цвет все фломастеры разные.
                                Ответить
                    • уровень логов задается же потом, при запуске?
                      компилятору придется делать одинаковый универсальный бинарник
                      т.е. уже по размеру удар
                      ну и я, конечно, не знаток синтаксиса jul, но ведь компилятор не может не делать вычисление в рантайме передаваемых аргументов в функцию записи в лог, даже если по уровню лога она не должна никуда дальше попасть?

                      поэтому в наших С++ проектах мне не западло в 99% случаев делать
                      verbose() << "some text which often ignored, " << somevar << etc << std::endl;
                      и только в 1% уже заморачиваться
                      if (logger.enabled(log::level::verbose)) {
                      // do some heavy intermediate process and output result to log
                      }
                      а в embedded проектах на С, где ресурсы ограничены, таки приходится экономить и бинарник и скорость и делать всегда
                      #if _DEBUG_CATEGORY_SUBCATEGORY
                      // do some debug and log
                      #endif
                      и перекомпиливать, чтобы тестить debug в песочнице, а в поле release работал быстро быстро и правильно
                      думаю, в андроиде эти требования вполне актуальны
                      Ответить
                      • C - отдельная песня. В среднем сишном проекте я бы вообще не стал особо напрягаться с логгерами: есть stderr, а для особых случаев syslog (в linux, разумеется). И да, макросами их, макросами.
                        Ответить
                        • stderr имеет смысл только для консольных проектов, syslog возможен только там где он существует
                          в моих С++ логах всё упомянутое можно юзать как бекенд, хотя на практике самыми востребованными бекендами оказались свой filerotate и слив по udp на отдельную машину
                          Ответить
                      • на андроиде пишут в основном на яве
                        Ответить
    • показать все, что скрытоvanished
      Ответить

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