Глава 5. Соглашения об именах и комментариях_____________________123_
нием, например, DOSGL (DOS Graphics Library, Графическая библиотека DOS), то полезно будет приписывать к именам функций шапку DOSGL:
DOSGLCreateBitmap(...);
Такая практика поможет вам избежать конфликтов, возникающих при использовании нескольких библиотек.
Ваш путь к самодокументируемому коду
В заключение давайте вкратце рассмотрим итог аккуратного выбора имен переменных (в соответствии с какими-либо соглашениями) в сочетании с разумным применением комментариев. Когда вы достигнете совершенства в соединении этих двух приемов, ваши программы действительно станут говорящими. По словам Бьерна Страуструпа только тот язык действительно является языком, который позволяет писать программы, понятные без дополнительной документации.
В приведенном примере мы вновь вернемся к функции ConvertinternalNameToFirstLast и посмотрим, как преобразит ее текст применение венгерской нотации и рекомендаций Zinc Application Framework.
// Эта функция получает на входе имя во внутреннем формате, // представляющее собой пару имя/фамилия в виде (фамилия, имя), // преобразует ее в форму имя фамилия и возвращает результат в // переменной IpszFisrtLastResult. Обязанность обеспечить нужный // объем памяти для результата лежит на вызывающей функции. //В случае ошибки функция возвращает пустую строку.
void ConvertInternalNameToFirstLast(char *lpszInternalName;
char *lpszFirstLastResult) (
const char TERMINATING_NULL = '\0' ;
char *pchCurrent;
*lpSzFirstLastResult = TERMINATING_NULL;
// Игнорируем неверные ведущие символы.
while (*lpszInternalName && *lpszInternalName != '(')
(
lpszInternalNante++;
)
if (*lpszInternalName == TERMINATING_NULL) return;
// Пропускаем открывающую скобку — она не входит ' // в результат.
pchCurrent = ++lpsz Internal-Name;
// Ищем первую запятую или закрывающую скобку. Скобку // включаем в поиск, чтобы отловить однословные имена // типа Madonna.