А какую систему нотации используете вы?

от автора

Доброго времени суток, хабровчане.

После многих лет написания, дописания, рефакторинга, дебаггинга своего/чужого кода на C++, и не только, по ряду причин я в конце концов пришел к вот такой системе нотации. Возможно она во многом похожа на венгерскую.

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

И да, давно хотел узнать, кто какую нотацию использует. Кому интересно прошу под кат.

Префиксы в наименовании идентификаторов

Основная часть имени пишется с прописной буквы.

По порядку следования символа в префиксе:

  1. Пространство использования:
    • g — глобальная переменная;
    • p — параметр функции;
    • v — локальная переменная внутри функции;
    • атрибуты/данные класса не имеют метки пространства использования.

  2. Тип:
    • o — нетривиальный тип (object);
    • n — Целое число (integer);
    • c — Символ (character);
    • f — Число с плавающей запятой (float);
    • d — Дата и/или время (date/time);
    • l — Блокиратор, locker;
    • b — Логический флаг, истина или ложь (boolean);
    • s — Текстовая строка, string;
    • m — Карта, набор пар «ключ»-«значение» (map).

  3. Если это массив:
    • a — массив, список, множество (array).

  4. Если это указатель или неконстантная ссылка:
    • 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/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *