После многих лет написания, дописания, рефакторинга, дебаггинга своего/чужого кода на C++, и не только, по ряду причин я в конце концов пришел к вот такой системе нотации. Возможно она во многом похожа на венгерскую.
Это небольшое упорядочение уже несколько лет меня реально спасает, пусть и приходится делать несколько дополнительных нажатий клавиш. Жить стало намного легче и голова уже не трещит во время чтения и редактирования кода.
И да, давно хотел узнать, кто какую нотацию использует. Кому интересно прошу под кат.
Префиксы в наименовании идентификаторов
Основная часть имени пишется с прописной буквы.
По порядку следования символа в префиксе:
- Пространство использования:
- g — глобальная переменная;
- p — параметр функции;
- v — локальная переменная внутри функции;
- атрибуты/данные класса не имеют метки пространства использования.
- Тип:
- o — нетривиальный тип (object);
- n — Целое число (integer);
- c — Символ (character);
- f — Число с плавающей запятой (float);
- d — Дата и/или время (date/time);
- l — Блокиратор, locker;
- b — Логический флаг, истина или ложь (boolean);
- s — Текстовая строка, string;
- m — Карта, набор пар «ключ»-«значение» (map).
- Если это массив:
- a — массив, список, множество (array).
- Если это указатель или неконстантная ссылка:
- r — неконстантная ссылка (reference);
- i — указатель на объект (pointer).
Правила для именования для других идентификаторов
- MAX_NAME_LEN — константные выражения;
- E.. — перечисления;
- i,j,x,y,v1,v2 — a..z0..9, единственный символ с возможно последующей цифрой, временная переменная без особого смысла;
- getVal, get_value — названия функций/методов, первое слово со строчной буквы, остальные — с прописной, особо ядрёные малыми, через подчёркивание;
- MyClass/MyType — названия типов/классов — каждое слово с прописной.
Если функция получается более менее громоздкая, то возвращаемое значение именую Ret или Res c сопутствующим префиксом. Например:
std::vector<int> vnaRet{0,1,2};
#include <string> using uint = unsigned int; using slong = signed long long; using str = std::string; // Returns length of string positive variant of Val. uint intWidth( slong pnVal ) { uint vnRet{1}; slong vnAbs{pnVal < 0 ? ( -1 ) *pnVal : pnVal}; pnVal = 10; while( pnVal <= vnAbs ) { vnRet++; pnVal *= 10; } return vnRet; } /* Fills string Dest with textual representation of integer number Val. * Returns this Dest as a result. * Len will contain the length of result string. * Beware of using Dest that points to too short characters array. */ char *intToStrW( char *const pciDest, slong pnSour, uint &pnrLen ) { uint vnSigned{pnSour < 0 ? 1U : 0U}; pnrLen = vnSigned + intWidth( pnSour ); uint vnLen{pnrLen}; if( vnSigned ) { pciDest[0] = '-'; pnSour *= -1; } pciDest[vnLen] = 0; while( pnSour ) { vnLen--; pciDest[vnLen] = ( pnSour % 10 + '0' ); pnSour /= 10; } return pciDest; }
Мне очень интересны ваши комментарии.
Спасибо за внимание.
ссылка на оригинал статьи https://habr.com/post/423975/
Добавить комментарий