Кресты / Говнокод #1874 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
while (true)
  {
    m_CurrentDevice += delta;

    if (m_CurrentDevice < 0)
      m_CurrentDevice = devices[DEV_PLATE]-1;

    if (m_CurrentDevice > devices[DEV_PLATE]-1)
      m_CurrentDevice = 0;

    break;
  }

Это конечно написано не специально - в результат целой кучи итераций и переделок. но результата это не отменяет

Запостил: TObject TObject, (Updated )

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

    • Вероятно, именно цикл есть наследие большого количества "итераций" и "переделок". Он стал уже не нужен, но: удовлетворяет контракту -- не тронь. Это из парадигмы "заплаточного" программирования.
      Ответить
  • да на самом деле ничему он не удовлетворяет - я его удалил тут же как обнаружил

    2Dimarius
    ээ, а действительно?..
    Ответить
    • Я предположил, что отрывок имеет хотя бы минимальный смысл. Кода то я не видел...
      Вообще "заплаточное" программирование -- это самый большой источник невразумительного кода вида

      <выходной параметр> public method1(<входные параметры>) {
      <здесь делаем дело>
      }

      <выходной параметр> public method2(<входные параметры>) {
      <здесь делаем тоже самое дело>
      }

      То есть, два метода с разными названиями делают одно и тоже, и сигнатура одинакова.
      Оказывается, что сначала эти методы делали разные вещи, предназначались для использования в разных местах, но после очередной заплаты возникла необходимость в том, чтобы они делали одно и тоже, но выносить это "одно" нельзя в отдельный метод, потому что следующая заплатка вновь может потребовать различного поведения.

      Всякие там случаи, когда сначала переменные определяются, а затем перекладываются в другие без изменений. Возникают конструкции, которые имеют инвариантом что угодно, как приведённый цикл: что в него не брось, он ни на что не повлияет.

      Зато, в большинстве случаев, можно быстро писать "приблизительный" код. Который что-то там делает, но точно его контракт не известен (тем более невозможно точно знать, что внутри него происходит). Мы думаем, что "потом залатаем".
      Ответить
      • Это скорее парадигма "творческий поиск", когда сначала мы делали одно, потом решили переделать, потом еще переделать, потом вообще сделать по-другому (причем на каждой итерации неясно, будем ли мы возвращаться к старым версиям, в результате последние просто камментется, а не удаляются). В суровой древности у этого цикла было еще куча проверок, которые в случае чего делали continue (т.е. нужен был именно цикл), есенно до break. После рефактора и удаления всякого мусора остался такой красивый цикл. Сама суть кода (+=, проверки) в данном случае не важна (она корректна). Собственно в финальной версии только они и остались.
        Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8