1. PHP / Говнокод #5961

    +134

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    $i=10000;
    
    while(true)
    {
    $i--;
    
    if ($i==0) break;
    
    // Какойто код с $i
    }

    Выкопал в одном серьезном проекте. Так там что не цикл так while(true) c точками выхода по телу цикла..

    Запостил: Vasiliy, 12 Марта 2011

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

    • Если можно, скажите что это за проект Энтересно
      Ответить
      • система документооборота для некой фирмы.
        Ответить
    • Обычная практика фирм-разводил.
      В дальнейшем за оптимизацию кода они сдерут немалые деньги, а сделают практически нечего - заменят/оптимизируют/уберут циклы
      Ответить
      • Не вижу ничего плохого в этом коде
        Есть много ситуаций, когда проще и надежнее влепить while(true) и выходить break'ами, чем сочинять выражения внутри скобочек while и потом думать надо while или do { } while здесь использовать

        ну не сильно проще это читать:
        while (--i != 0)
        {
        }

        а если потребуется изменить логику - ошибешься где-нибудь как нефиг делать.
        Ответить
        • не, напрягает. если в условии стоит true - я начинаю лихорадочно искать брейки )
          Ответить
        • вы вчитайтесь. условный выход по брейку не где-то, а в 2й строке тела. ладно бы если где-то внутри цикла еще брейки были, но автор заострил внимание именно на таком раскладе, а стало быть заменяется обычным
          for($i=9999; $i>0; $i--) { ... }

          И даже не пытайтесь убедить меня в том что while на 3 строки более удобочитаем.
          Ответить
        • Тут палка о 2х концах. А если ошибешься внутри цикла и расставишь брейки как бэ не так. Я думаю всегда можно найти здравое условие для выхода, некоторое предельное значение.
          Ответить
    • за ваш контекст не скажу, но я часто такое делаю когда нужно по извращенным входным данным итерировать (типа ходить по графу). иногда случается что кто-то чего-то в входных данных нагородил и прога уходит в вечный цикл (не достигает выхода из графа). кастомерам проблемы намного проще анализировать когда прога слетает по такой sanity check, вместо подвисания.
      Ответить

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