Наименование переменных и стиль программирования

Наименование переменных

Правила наименования переменных брались в том числе по этой ссылке.

Функции - глаголы

Переменные - существительные

Предикаты - is_empty (возвращает true или false)

Если исследуется вхождение - has_children (возвращает true или false)

Количество user_count

Коллекции (массивы) - множественное число - errors

Наименование функций должно быть в формате "действие_объект_уточнение"
get_name();
set_name();
get_name_by_id();

Попытка определения префиксов (а может постфиксов) для типов

a массив (array)
c счетчик (counter)
o объект (object)
m член класса
p указатель (pointer)
s строка(string)
st структура (struct)
v коллекции (vector, map и т.д.)

user_id или id_user?

user_id
Сначала сущность, а потом её характеристики.
Обоснование, ну просто по логике
шкаф->книга->страница
Поиск в Google выдает страниц с user_id в 40 раз больше чем с id_user

Стиль программирования

  • В одной строке инициализируется одна переменная
  • Для указателей и ссылок * и & должны относиться к типу. Это позволит отделять их от операций разыменования и взятия адреса (которые будут относиться к имени)
    
    int* a;    // Неправильно - int *a или int * a
    int& b;    // Ссылка в параметрах функций. Неправильно -  int &b или int & b
    
  • Избегай указателей.
  • Используй ссылки а не указатели для аргументов функций которые должны быть изменены.
  • Используй const там где возможно. Не нужно для параметров функции передаваемых по значению, т.к. передаваемая переменная копируется и не может быть изменена.
  • Объявляй переменную непосредственно перед использованием.
  • Не используй конструкцию типа using namespace std; Она загрязняет глобальное пространство имен и может вызвать трудноуловимый конфликт имен или замену используемых переменных или функций. В маленьких учебных программах я буду постоянно нарушать это правило.
  • Не используй Венгерскую нотацию, так как она связывает имя переменной с типом, и в случае его смены это вызывает проблемы.
  • Не используй Макросы засоряют глобальное пространство имен, на этапе их распаковки препроцессором не проверяется тип переменных, при раскрытии в макросе выражений может порядок вычисления операций быть отличным от "ожидаемого". Inline функции не обладают недостатками макросов и не уступают в производительности (также раскрываются без необходимости вызова).
  • Не используй go to, так как данный оператор усложняет анализ и отладку кода (порождает "спагетти код"). По той же причине нужна осторожность с continue и break.
  • Вместо "магических чисел" (например 20) нужно использовать именованные константы (например int MAX_COUNT_PEOPLE = 20;). Это позволяет внести изменения в программе или функции только в одном месте.
  • Используй геттеры и сеттеры вместо обращения к переменным, это позволяет уменьшить поиск возможных изменений переменной (достаточно просмотреть только сеттеры) и в случае смены типа переменной, достаточно только заменить обработчики а не править весь код.
2023-04-11



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Ассемблерный листинг С++
Бенчмарки в С++
Рисование в консоли windows на С++
Функции в С++
Параметры функции в С++
Глоссарий С++. Идентификаторы, квалификаторы, модификаторы, объявление, определение и т.д..
Исключения в С++. Выбрасывание и ловля исключения.
Достоинства и недостатки C++
Сборка приложения без IDE C++ с помощью MinGW и Qt
Перегрузка функций и операторов в С++
Случайные числа в С++. Полиномиальная генерация случайных чисел.
Ссылки в С++
Рекурсия в С++. Примеры рекурсивных программ и без использования.
Шаблоны C++
Наименование переменных и стиль программирования
Версия компилятора С++
Время выполнения программы C++