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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
UINT aScrollMode = 0;
     m_pScrollH->GetInfo(&aScrollMode, 0, 0);
     if (!(aScrollMode & M_INVISIBLE))
     {
          ...
     }

Рефакторю довольно большой проект (5 Мб исходников). Единственный способ спросить у контрола (любого из имеющихся) привожу выше.

Запостил: Konstantin.Grebenschikov Konstantin.Grebenschikov, (Updated )

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

  • Как вариант - инлайновую функцию которая и будет проверять и возвращать результат.
    Делаем динамик каст контрола к классу содержащему эту функцию и возвращаем результат проверки.

    Это еще очень хороший код, я успешно разгребал более худшие.
    Ответить
    • То что мне регулярно приходится разгребать еще более худший код не делает этот хорошим. Применение битовых полей для разбора состояния объекта, применение inline функций без доказанной необходимости оптимизации быстродействия, необходимость писать 3 строки сопровождающего кода для простейшего действия - это говнокод.
      Ответить
        • Для внутреннего представления состояния объекта? Да всем 🙂
          Отличие битовых полей от структуры - увеличение сложности и, вероятно, оптимальности кода в плане быстродействия в пользу оптимальности в плане используемой памяти. Причем жестко зашитое в код.
          Отличие структуры от объекта - наличие контролируемого поведения.
          Использование битовых полей вместо объектов - сумма вышеперечисленного.
          Ответить
          • Что-то не совсем понятно. В быстродействии отличия минимальные. Это тоже самое что биты вручную выставлять. А поведение никто не мешает контролировать. Битовые поля не влияют на остальное содержимое класса.
            Если только ты имеешь в виду наличие большого количества полей (десятки-сотни). Тут я согласен.
            Ответить
            • Как правило работа с битами, вручную или через битовые поля медленнее и сложнее. Главное из-за чего их применять не следует - код становится сложнее, а значит менее читаемым.

              Практически любое битовое поле легко преобразуется в структуру. Парадокс в том, что в ООП структуры встречаются крайне редко. Как только однородные данные оказываются сосредоточенными в одном месте (info контрола в данном примере), становится видно, что их удобно наделить поведением. Хотя бы проверкой согласованности внутреннего состояния.

              например, сравните с тем, что было наверху:
              if ( m_pScrollH->GetInfo().Visible() )
              {
              ...
              }
              Проще?
              Единственный случай, когда мне приходилось применять битовые поля, и это было оправданным, подготовка структуры данных для пересылки другому устройству.
              Ответить
            • Биты вручную выставлять можно быстрее, чем компилятором, тк компилятор, даже при максимальной оптимизации делает это хуже адекватного проффессионального программиста.
              Покрайней мере VS 2008 это сделает хуже меня, даже без прибегания к ассемблеру(применением логических операций) Измерял.
              Ответить

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

Из-за тебя ушел bormand, guest!

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


    8