1. C++ / Говнокод #4628

    +183

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    bool or(bool x1, bool x2) {
    	if (x1 || x2)
    		return true;
    	else
    		return false;
    }

    Я РЕАЛЬНО видел такой код, написанный на полном серьёзе.

    Запостил: Alever, 14 Ноября 2010

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

    • паскалист какой-нибудь по оператору истосковался
      Ответить
      • показать все, что скрытоДык есть же оператор or в c++
        Ответить
        • Сгинь, пхпшник!
          Ответить
          • Советую почитать из стандарта 2.5 Alternative tokens
            Ответить
            • отсюда мораль : без пруфлинка ты похапешник.
              Ответить
              • а с пруфлинком - зануда :р
                Ответить
                • почему "зануда"!?. Вот rat4 сказал, что or есть в с++, его все заминусовали по незнанию и пхпшником назвали. А как только ссылку на стандарт сделал - всё стало на свои места. И пхпешник уже тот, кто об этом не знал.
                  Ответить
                  • Привожу пруфпик:
                    http://ipicture.ru/uploads/20101115/QnXoU0ny.png
                    В Notepad++ or подсвечивается, но Борландом такой код не компилируется (как только я заменил or на ||, код сразу же скомпилировался).
                    Если действительно or есть, то подскажите мне ряд компиляторов, в которых он поддерживается.
                    Ответить
                    • #include <iso646.h>
                      Ответить
                      • Нашел по соседству в билдере сей заголовочный файл. Но все равно говорить, что по умолчанию в цепепе есть or, нельзя, так как надо подключать отдельный файл/описывать самому (в файлах, шедших с Borland C/C++ Compiler данного файла не оказалось, пришлось лезть в папку с билдером) .
                        Ответить
                        • Почитайте раздел стандарта, о котором упомянул rat4.
                          Ответить
                    • А компилятор например GCC 4.4.2
                      Ответить
        • ну например в VC++ нету и не надо.
          Ответить
          • VC как всегда... Но #include <ciso646> помогает :)
            Ответить
            • ты забыл
              #include <govnokod>

              и выключить предупреждения в свойствах проекта
              Ответить
    • показать все, что скрытоРеально, дело здесь ведь не в реализации оператора or =)))
      Чтобы помочь сему куску говонкода избавиться от приставки "говёности", говнокодеру на сях нужно было бы написать так(хотя затея с добавлением or странная):
      inline bool or(bool x1, bool x2)
      {
      return (x1 || x2);
      }
      Ответить
    • где смияцо?

      унылый долбоебизм
      Ответить
    • код трижды говенен:
      1) поганая реализация функции.
      2) сделана ненужная функция (захламляет код тока), которая даже не инлайновая.
      3) и вообще, функция не делает того, что должна: нельзя написать or(ptr == NULL, ptr->field == NULL).
      Ответить
      • Думаю, она заинлайнится.
        Реальное говно, что неполная проверка уже того (пункт 3).
        Ответить
      • А как вы определили, что она неинлайновая? В C++ функция, реализованная при объявлении, будет помечаться как инлайновая.
        Ответить
        • ну будет-будет, хотя бы в этом случае.
          но функция все-равно лишняя.
          Ответить
    • Функция написано странно - это так. Но навскидку называть ее ненужной могут только зеленые пионеры. Писать подобные функции приходится нередко в случаях, когда она должна фигурировать в качестве параметризирующей callback функции.

      Например, у вас есть реализация некоего абстрактного общего алгоритма, который должен быть параметризован снаружи конкретной булевской функцией-callback-ом. Например, это может быть алгоритм выполнения некоей теоретико-множественной операции над двумя наборами полигонов (пересечение, объединение, разность и т.п.)

      За использование имени `or`, конечно, стоит пожурить, ибо является оно одним из alternative tokens.
      Ответить
      • Для callback'а тело было бы неплохо упростить.
        Ответить
      • Анонимные методы спасут мир!
        Ответить
      • ооо ебать. наконец пришел Профессор и открыл мне глаза на сей шедевр програмерской мысли. он[шедевр] оказывается не говнокод, а callback.

        bool (*)(bool, bool) - Гениально!

        template<typename _callback_>
        bool or(bool l, bool r, _callback_ true_or) { return true_or(l, r); } - вот так оказывается пишут реальные пацаны!
        Ответить
        • Зря ржёшь, он дело сказал.
          Некоторые операции в качестве параметра требуют функцию. Из-за отсутствия в языке анонимных методов приходится писать несколько тупых однострочных функций типа
          {return i==j}
          {return a[i]>0}
          и так далее
          Ответить
          • {return i==j} - неудачный пример, ибо std::equal_to
            Ответить
            • а {return a[i]>0} потому что :
              bind2nd( greater<int>(), 0 )
              :))
              Ответить
          • да, приходится, но какое отношение все это имеет к данному говнокоду?
            Ответить
      • Мы же этого не видим ни в приведенном примере, ни в описании.
        Да и название функции это никак не отражает - увидя конкретно этот код, не зная особенностей остальных исходников, возникает вывод о говнокоде.
        Этот же вывод слелает новый программист, которого посадят на этот проект.
        Ответить
        • > Этот же вывод слелает новый программист, которого посадят на этот проект.
          Только у него уже будет контекст перед глазами.
          Ответить
          • Если проект более-менее приличный, то да. Мы этого опять-таки не знаем:)
            Ответить
            • Проект без контекста ? Ну только если :
              int main()
              {
                 return or( true, false );
              }
              :)
              Ответить
              • эта функция в отдельном модуле с К.О.-комментарием, и в модуле больше ничего нет.
                а где-то в инклудах упоминание модуля встречается, а где - хз.
                такое может быть?)
                контекст найти можно, но его ж искать придется - сразу не видно%)
                Ответить
                • Фантазировать можно сколько угодно долго. Но варианта всё равно только два: либо есть контекст (т.е. проект, в котором всё это "РЕАЛЬНО" и "на полном серьёзе"), либо его нет (т.е. только вырезка кода, опубликованная здесь).
                  Ответить
    • -
      Ответить

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