Программирование >>  Решение нетривиальных задач 

1 ... 13 14 15 [ 16 ] 17 18 19 ... 77


Часть


Имена и идентификаторы

Имена играют важную роль. Правильно выбранные имена могут сделать программу поистине самодокументированной, не требуя совсем или требуя мало дополнительного набора в виде явных комментариев. Плохо выбранные имена (например, state - состояние или штат ?) могут добавить ненужную сложность в вашу программу. Эта часть книги содержит правила выбора имен.



44. Имена должны быть обычными словами английского языка, описывающими то, что делает функция, аргумент или переменная

Избегайте аббревиатур; они ухудшают читабельность программ. Некоторые по привычке продолжают использовать аббревиатуры, что приводит к абсурдной практике, типа отбрасывания последней буквы слова или удаления из него всех гласных. Возьмем странно названную функцию UNIX creat(); очевидно, что create() лучше. Я также видел странности типа lnghth вместо length и mt вместо empty.

При этом общепринятые аббревиатуры являются очевидными исключениями. Вот тот минимум из них, которым я пользуюсь сам:

col - индекс столбца; cur - текущий;

i j - обобщенные счетчики циклов;

max - максимум (обычно в качестве префикса или суффикса); min - минимум (обычно в качестве префикса или суффикса); obj - обобщенный объект (имеется указатель на базовый класс,

но производный класс не известен); p ptr - обобщенный указатель; s str - строка (в языке Си обычно char*),

но не употребляйте их, если называемый объект используется не как обобщенный. Например, i имеет смысл использовать в качестве счетчика цикла в операторе for, если этот счетчик используется просто для подсчета числа итераций:

for( i = 10; --i >= 0; ) нарисовать 10 тире putchar(-);

Используйте настоящее имя, если вы применяете счетчик для чего-нибудь отличного от счета. Сравните этот код:

for( i = 0; i < imax; ++i ) for( j = 0; j < jmax; ++j ) move cursor( i,j );

со следующим:

for( row = 0; row < max row; ++row ) for( col = 0; col < max col; ++col ) move cursor( row, col );

Я также избегаю использовать x и y вместо row и column. Одно из ранее указанных правил рекомендует пропускать программу через систему проверки орфографии. Действительное достоинство этого метода состоит



2 Я подозреваю, что венгерская запись так интенсивно используется вследствие того, что большая часть Microsoft Windows написана на языке ассемблера.

3 По крайней мере, оно должно быть. Я подозреваю, что некоторые энтузиасты венгерской записи так плохо организуют свои программы, что просто не могут найти нужные объявления. Включая тип в имя, они избавляются от многих часов поисков в неудачно спроектированных листингах. Программы на языке ассемблера, которые по необходимости включают в себя множество глобальных переменных, являются очевидным исключением.

в том, что он побуждает вас использовать в качестве имен обычные слова.

44.1. Не используйте в качестве имен тарабарщину

Отличный образец такого подхода можно наблюдать в любом предлагаемом Microsoft примере программы, хотя эта проблема ни в коем случае не ограничивается корпорацией Microsoft. Все демонстрационные программы Microsoft Windows включают тип переменной в ее имя. Например, объявление типа: const char *str;

будет сделано следующим образом:

LPCSTR lpszstr;

Переведите lpszstr как указатель типа long с именем str на строку, оканчивающуюся 0 . На самом деле здесь несколько проблем, не последней из которых является тот факт, что LPCSTR скрывает наше объявление указателя. Тем не менее, обсуждаемое правило посвящается проблеме самого имени.

Этот стиль выбора имен называется венгерской записью по названию родины руководителя отдела программирования Microsoft Чарльза Саймони, который его изобрел. (а не потому, что его использование придает программам Microsoft такой вид, как будто они написаны на венгерском языке.)

Венгерская запись целесообразна для языка ассемблера, в котором все, что вы знаете о переменной - это ее размер. Включение информации о типе в имя переменной позволяет вам контролировать правильность ее использования.2 Языки более высокого уровня типа Си и Си++ используют для этой цели объявление переменных.

Доктор Саймони несколько раз в печати защищал такой метод записи, но я бы не стал его рекомендовать для программ на Си или Си++. По моему мнению, венгерская запись не дает ничего, кроме ухудшения читаемости программ. Простые str или string значительно легче читаются и содержат ту же информацию. Если вам на самом деле нужно узнать тип, то для этого достаточно вернуться к определению.3



1 ... 13 14 15 [ 16 ] 17 18 19 ... 77

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика