Хороший стиль программирования

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Здесь описаны некоторые советы хорошего стиля программирования. Это больше относится к современным компиляторам, но чего можно, того стоит придерживаться и в старых версиях. Так вам будет легче потом.

Старайтесь придерживаться одного стиля

  • Главное — корректность, простота и ясность
  • Комментируйте и документируйте код
  • Не допускайте дублирования кода
  • Избегайте длинных функций и глубокой вложенности
  • Компилируйте без замечаний при максимальном уровне предупреждений
  • Не используйте в коде непоименованные числовые константы
  • Избегайте макросов
  • Активно используйте const
  • Объявляйте переменные как можно локальнее, инициализируйте при объявлении
  • Работайте с типами, а не с представлениями в памяти
  • Избегайте применения static_cast (явное статическое преобразование типов) к указателям
  • Не применяйте memcpy или memcmp к объектам
  • Не используйте неизвестные аргументы в функциях (троеточия)
  • Не используйте недействительные объекты и небезопасные функции
  • Различайте указатели и ссылки
  • Не оптимизируйте преждевременно

 

 

При разработке функций

  • Не пишите код, который зависит от порядка вычислений аргументов функции
  • Текст функции должен умещаться на один экран, а вложенность блоков и операторов должна быть не более трёх
  •  Пусть одна функция решает только одну задачу
  •  Избегайте вложенных последовательных конструкций if там, где их можно заменить оператором &&
  • Избегайте дублирования кода. Нужно завести именованную функцию вместо повтора схожих фрагментов кода.
  • Не нагружайте блок try. Предпочитайте использовать освобождение ресурсов в деструкторах (там где это возможно), а не в try-блоках

При перегрузке операторов

  • Сохраняйте естественную семантику перегруженных операторов
  • Отдавайте предпочтение каноническим формам арифметических операторов и операторов присваивания
  • Не перегружайте &&, || и , (запятую)
  • Используйте перегрузку, чтобы избежать неявного преобразования типов

 

При работе с классами

  • Ясно представляйте, какой вид класса вы создаете
  • Предпочитайте минимальные классы монолитным
  • Делайте данные-члены закрытыми
  • Не допускайте вмешательства во внутренние дела класса
  • Предпочитайте функции, которые не являются ни членами, ни друзьями
  • Предпочитайте композицию наследованию
  • Открытое наследование означает заменимость. Наследовать надо не для повторного использования, а чтобы быть повторно использованным
  • Предпочитайте предоставление абстрактных интерфейсов
  • Избегайте возможностей неявного преобразования типов
  • Виртуальные функции стоит делать неоткрытыми, а открытые — невиртуальным

 

 

 При разработке Конструкторов, деструкторов и копировании

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

 

При разработке модулей

  • Делайте заголовочные файлы самодостаточными
  • Используйте #pragma once для защиты заголовочных файлов от повторного включения
  • Выделяйте и освобождайте ресурсы в одном и том же модуле
  • Не определяйте в заголовочном файле объекты со связыванием
  • Не позволяйте исключениям пересекать границы модулей
  • Используйте достаточно переносимые типы в интерфейсах модулей
  • Не используйте using для пространств имен в заголовочных файлах или перед директивой #include
  • При разработке шаблонов пишите максимально обобщенный код
  • При обработке ошибок и исключительных ситуациях
  • Широко применяйте ASSERT для документирования внутренних допущений и инвариантов
  • Определите разумную стратегию обработки ошибок и строго ей следуйте
  • Проектируйте и пишите безопасный в отношении ошибок код
  • Для уведомления об ошибках следует использовать исключения
  • Уведомляйте об ошибках, обрабатывайте и преобразовывайте их там, где следует

 

 

Правила использования STL

  • Освойте STL
  • По умолчанию используйте vector. В противном случае выбирайте контейнер, соответствующий задаче
  • Предпочитайте функцию push_back другим способам расширения последовательности
  • Предпочитайте операции с диапазонами операциям с отдельными элементами
  • Предпочитайте вызовы алгоритмов самостоятельно разрабатываемым циклам
  • Пользуйтесь правильным алгоритмом поиска
  • Пользуйтесь правильным алгоритмом сортировки

=====================================

 

 

 

Дополнительные советы

  • Программируйте, заглядывая в будущее
  • Ознакомьтесь со стандартом языка
  • Настраивайте проект таким образом, чтобы он корректно компилировался во всех вариантах сборки
  • Одна голова хорошо, а две лучше

 

Эти и некоторые другие советы здесь

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

3 комментария: Хороший стиль программирования

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

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Мы должны убедиться, что сайтом пользуется не робот!!! Для этого разденьтесь догола и включите wеb-камеру.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок