[@McConnell2004]

Структуры

  • Используете ли вы структуры вместо отдельных переменных для организации и манипуляции группами взаимосвязанных данных?
  • Рассматривали ли вы создание класса как альтернативу использованию структуры?

Глобальные данные

  • Действительно ли все переменные объявлены локально или в области видимости класса, если только они не обязательно должны быть глобальными?
  • Различаются ли в соглашениях по именованию переменных локальные, классовые и глобальные данные?
  • Документированы ли все глобальные переменные?
  • Свободен ли код от псевдоглобальных данных — мамонтообразных объектов, содержащих мешанину из данных, передающихся в каждый метод?
  • Используются ли методы доступа вместо глобальных данных?
  • Организованы ли данные и методы доступа к ним в классы?
  • Предоставляют ли методы доступа уровень абстракции, независимый от реализации используемого типа данных?
  • Находятся ли все методы доступа на одном уровне абстракции?

Указатели

  • Изолированы ли операции с указателями в методах?
  • Корректны ли обращения к указателям или они могут быть “висячими”?
  • Проверяет ли код корректность указателей перед их использованием?
  • Проверяется ли корректность переменной, на которую ссылается указатель, перед ее использованием?
  • Присваивается ли указателям пустое значение после их освобождения?
  • Использует ли код все необходимые для читабельности переменные-указатели?
  • Освобождаются ли указатели в связных списках в правильном порядке?
  • Выделяет ли программа “резервный парашют” памяти, чтобы иметь возможность аккуратно завершить выполнение в случае нехватки памяти?
  • Используются ли указатели только как последнее средство, когда другие методы неприменимы?

Ключевые моменты

  • Структуры могут помочь сделать программы менее сложными, упростить их понимание и сопровождение.
  • Принимая решение использовать структуру, подумайте, не будет ли класс подходить лучше.
  • Работа с указателями чревата ошибками. Обезопасьте себя, используя методы или классы для доступа к ним и практику защитного программирования.
  • Избегайте глобальных переменных не только потому, что они опасны, но и потому что их можно заменить чем-то лучшим.
  • Если вы не можете отказаться от глобальных переменных, работайте с ними через методы доступа. Эти методы предоставляют все то же и даже больше, что и глобальные переменные.