
Правила именования идентификаторов
Любая среда, будь то среда программирования или игра в бильярд, имеет свой набор терминов и общепринятый жаргон. Эти термины помогают улучшить взаимодействие между различными участниками среды.
С++ предоставляет множество различных типов данных, кроме того, имеется возможность создавать новые типы данных. Из-за такого большого количества типов данных чтение программы может вызывать определенные трудности. Например, попробуем понять следующую строку, содержащую операцию присваивания:
T = T0;.
Пока можно утверждать, что переменной Т присваивается какое-то начальное значение. Добавим к этому, что оператор присваивания записал начинающий программист. Какие типы имеют переменные Т и Т0? Чтобы ответить на этот вопрос, мы вынуждены искать в программе то место, где они объявлены, что неэффективно и мало способствует пониманию программы. Рассмотрим теперь присваивание:
realT = intT0;.
Здесь real и int используются в качестве префиксов к названиям переменных и характеризуют тип переменной. Мы сразу видим, что вещественной переменной присваивается целое значение. Появляется сомнение в правильности записанного оператора. Усовершенствуем наш пример:
realTime = intStartTime;.
Теперь достаточно одного взгляда, чтобы понять, что речь идет о моделировании времени и время задается вещественным числом. Кроме того, мы видим, что в рассмотренном операторе устанавливается начальное значение времени, причем это начальное значение времени задается на границе часа или минуты или секунды. В нашем распоряжении теперь имеется немало прямых и косвенных данных, необходимых для понимания программы. Мы сразу чувствуем руку опытного программиста.
Использование осмысленных имен не составляет никакого труда для разработчика, но упрощает жизнь всем тем, кому впоследствии придется читать код (в первую очередь это касается самого разработчика).
Венгерским программистом фирмы Microsoft Чарльзом Симони (Charles Simonyi) были предложены соглашения о правилах именования идентификаторов, получивших впоследствии название венгерской нотации. Суть этой нотации заключается в том, что имя переменной начинается с префикса, который содержит одну или несколько строчных букв. Этот префикс определяет тип переменной. За префиксом следует само имя, которое может состоять как из прописных, так из строчных букв, но первая буква имени - всегда прописная. Например, идентификатор nInformationContent обозначает некоторую целую переменную (назначение переменной предлагаем определить самостоятельно). Основные префиксы венгерской нотации приведены в таблице 1.
Префиксы имен переменных для указания типа данных Таблица 1
Префикс |
Соответствующий тип данных |
b |
BOOL |
by |
BYTE |
c |
CHAR |
dw |
DWORD |
fn |
Функция |
h |
Дескриптор |
i |
INT |
l |
LONG |
lp |
Дальний указатель (Барков И.А.: понятие можно считать устаревшим) |
n |
short или int |
p |
Указатель |
pfn |
Указатель на функцию |
psz |
Указатель на строку, заканчивающуюся нулевым байтом |
pv |
Указатель на тип void |
sz |
Строка, заканчивающаяся нулевым байтом |
u |
UINT |
v |
void |
w |
WORD |
x |
Короткое целое число, используемое в качестве координаты x |
y |
Короткое целое число, используемое в качестве координаты y |
Теперь можно легко сообразить, что обозначают такие имена переменных, как lpText или uType.
Можно придерживаться этой системы обозначений или придумать что-то свое. Однако солидные программистские фирмы обычно разрабатывают свои стандарты. Мы также примем за основу приведенные далее соглашения.