Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

76m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 3. Что в имени тебе моем?Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

имена, такие как состояния конечных автоматов, части протоколов связи, элементы баз данных, исполняемые программные модули и т. д. Но для начала ограничимся первой перечисленной шестеркой.

Игра в названия

Какое назначить имя? Техника создания любого имени зависит от стандарта кодирования, которого вы придерживаетесь. Однако хотя стандарт и определяет некоторые правила составления имен, он не бы% вает настолько конкретным, чтобы определить правильное имя любо% го элемента, входящего в программу.

Чтобы дать хорошее имя, важно точно понимать объект, для которого оно предназначено. Если вы не понимаете сущности, которой собирае% тесь дать имя, какую роль она будет играть и зачем вообще она сущест% вует, можно ли рассчитывать, что вы дадите ей осмысленное имя? Плохие имена часто свидетельствуют о слабом понимании предмета.

Чтобы придумать хорошее имя, главное – четко понимать, для кого оно предназначено. Только в этом случае имя может стать осмысленным. Если не удается придумать хорошее имя объекту, спросите себя, понятно ли вам его назначение.

Прежде чем рассматривать конкретные категории создаваемых имен, важно выяснить, чем мы руководствуемся при выборе имени и почему то или иное имя является плохим или хорошим. Уделим внимание вы% яснению того, какими качествами обладают хорошие имена.

Описательность

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

Даже точного наименования может быть недостаточно. Людям свойст% венно придерживаться первого впечатления о предмете – «по одежке встречают». Поэтому тщательный выбор имени может создать нужное первое впечатление. Выбирая имена, рассчитывайте на неопытного читателя, не владеющего такими обширными знаниями, как вы сами.

Не всегда легко найти хорошее описание. Если не удается подобрать хо% рошее имя, это может свидетельствовать о недостатках всей конструк% ции и необходимости внесения в нее изменений.

Техническая корректность

Современные языки программирования требуют выполнения некото% рых правил при образовании имен. Большинство из них различает верхний и нижний регистры символов, запрещает пробельные символы

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

Играm

в названия

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

77Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

(пробел, табуляция, перевод строки) и любые другие, помимо буквен% но%цифровых и некоторых других (например, символа подчеркива% ния). Заметные ограничения на длину идентификаторов перестали су% ществовать.1 Многие языки разрешают записывать идентификаторы с помощью Unicode, но сохраняется традиция ограничения символами ISO8859%1 (ASCII).

Возможны дополнительные ограничения. Стандарты C/C++ резерви% руют определенные диапазоны имен: глобальные идентификаторы не должны начинаться с символов str, за которыми следует буква нижне% го регистра, а также начинаться с символа подчеркивания или совпа% дать с идентификаторами пространства имен std. Для написания на% дежного, корректного кода нужно помнить об этих ограничениях.

Идиоматичность

Если какая%то комбинация символов допустима в языке, это не зна% чит, что она автоматически становится хорошим именем. Понятными читателю кажутся те имена, которые представляют собой языковые идиомы. Так же как беглое владение естественным языком предпола% гает знание его идиом, так и уверенное владение языком программи% рования требует применения идиом.

В некоторых языках применяется единое стандартное правило образо% вания имен; обширная библиотека Java навязывает структуру, от ко% торой трудно отказаться, в то время как в C и C++ степень единообра% зия меньше. Там существует несколько культур со своими особенно% стями: одни из них действуют в стандартных библиотеках, другие в Windows Win32 API.

Изучите правила образования имен в языке, с которым работаете. Еще важ& нее изучить идиомы этого языка. Есть стандартные способы формирования имен? Вот ими и пользуйтесь.

Тактичность

В ряде случаев качество имени может оцениваться по следующим па% раметрам:

Длина

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

1Учтите, что в старых версиях C уникальность внешних идентификаторов определялась по первым шести символам, а регистр мог не иметь значения.

Когда вы пишете код, точно определите, кто и как будет его обрабатывать.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

78m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 3. Что в имени тебе моем?Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Ясность имени предпочтительнее его краткости.

Однако есть случай, когда хороши короткие (даже однобуквенные) имена – в переменных цикла. Они уместны в маленьких циклах, где переменные типа loop_counter оказываются неоправданно боль% шими и быстро утомляют.

Следует учитывать относительные достоинства коротких и длинных имен, особенно в зависимости от области действия переменной.

Стиль

Стиль именования тоже имеет значение. Подобно тому как на похо% ронах неуместны грубые шутки, дурно составленное имя может вы% звать сомнения в профессиональности кода. Да, дурацкие имена за% ставляют читателя усомниться во вменяемости автора кода.

Избегайте шутливых имен, типа blah или wibble, или принятых сре% ди гуру foo и bar. Очень легко проглядеть их, и первая улыбка сме% няется неловкостью. (Объекты с такими именами часто возникают как временные заплатки, но сохраняются дольше, чем предполага% лось.) Также очевидно, что профессиональный код не должен со% держать бранных слов.

Пища для размышлений

Так что все%таки с этими foo и bar? Это слова из юмора гиков – совершенно бессмысленные и в то же время употребляемые осо% бым образом. Обычно они служат заместителями произвольных объектов. Можно, например, написать: увеличим некоторую пе% ременную foo следующим образом: ++foo;.

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

Этимология этих слов точно не установлена. Обычно их возводят к армейскому сленгу времен Второй мировой войны FUBAR (Mucked Up Beyond All Repair). Нет сомнений, что в готовом коде таких имен быть не должно.

Выбирайте для объектов правильные имена сразу и навсегда.