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

    +166

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    MyClass * obj = (MyClass*)true;
    while (obj)
    {
        obj = GetObj();
        // ...
    }

    Запостил: glook, 18 Мая 2010

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

    • плюсанул...
      но иногда такой код бывает оправданным... допустим, если перед вызовом GetObj нужно выполнить какое либо тействие, типа MoveNext()...
      Ответить
      • уж лучше do-while написать, чем-так
        Ответить
        • при do..while() надо проверять на 0 первый объект, отсюда условие в цикле, что - плохо...
          я не говорю это это не говнокод, мне просто однажды пришлось написать такую конструкцию, так как при других раскладах, получалась либо дополнительные проверки на досрочный выход, либо использование функций получения очередного элемента в нескольких местах... (еще был вариант с goto, но религия не позволяет)...
          Ответить
          • Но так и здесь же тоже нужна проверка, что GetObj() не вернул NULL!

            MyClass * obj;
            while (obj = GetObj() ) {
            // ...
            }

            Вот и все, и не надо изобретать Слонопотама.
            Ответить
            • компилятор С++ не любит такой код, тут будет warning
              надо так
              MyClass * obj;
              while ( (obj = GetObj()) != 0 )
              {
              // ...
              }
              С уважением
              Pushkoff
              З.Ы. Не могу залогиниться, прокся перестала пускать https трафик от яндекса.
              Ответить
              • ебаный насос, оказывается с++ еще большее говно чем все думают. скобок больше чем в лиспе. нахуй такое счастье, нахуй...
                Ответить
                • Скобки сильно защищают лишней траты нервов...
                  Ответить
                  • ну это если не знать precedence
                    Ответить
                  • Ты эти сказочки школьникам рассказывай, а пока что С++ опять говном упоролся...
                    Ответить
                • дык в православном святотроицком си так же
                  Ответить
              • MyClass * obj = GetObj();
                while (obj)
                {
                // код ...
                obj = GetObj();
                }

                Немного гормоничнее, не находите?
                Ответить
              • Хватит и так:

                while ((obj = GetObj()))
                {
                }
                Ответить
        • Вообще не понятно, если основная работа цикла идет после GetObj() (о чем свидетельствует комментарий с троеточием), то почему условие выхода перед GetObj()? В таком контексте действительно разумнее do..while, тело выполнится хотя бы раз, чего видимо и добивались преобразованием от true.
          Ответить
          • уверен что там сначала был отдельный флаг, а потом он почти зарефакторился...
            Ответить
    • Зачем это кому-то могло понадобиться?
      Ответить
      • Затем, что в любой почти конторе есть пачка долбоебов, которые считают, что такой код ог, и активно внедряют его в проекты =)
        Ответить

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