Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.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

 

 

 

86m

 

 

 

 

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

 

 

 

 

ком лежать в Daffodil.cpp, поскольку какая%то ее часть могла быть в общем файле FlowerStuff.cpp, а то еще и в Yogurt.cpp – по совершенно непонятным причинам. Нетрудно догадаться, что поиск нужных фраг% ментов кода иногда превращался в кошмар. В таких случаях броузеры исходного кода бывают полезны, но лучше всего пользоваться прове% ренными временем методами эффективного именования.

Роза пахнет розой

Значение имени больше, чем может показаться на первый взгляд, и су% ществует масса соображений при выборе имени для программного объ% екта. Какими главными принципами следует руководствоваться?

Чтобы выбрать хорошее имя, нужно:

Соблюдать единообразие

Связывать имя с содержимым

Извлекать из имен практическую пользу

Все хорошо, что хорошо кончается

Суффикс – составная часть имени файла. Система сборки Java% программ требует, чтобы имена файлов исходного кода заверша% лись на .java. Компиляторы C и C++ безразличны к суффиксам, но давать файлам заголовков имена с расширением .h настолько общепринято, что всякий иной способ режет глаз. Недостаток строгих правил приносит некоторые неудобства; есть несколько стилей именования файлов реализации C++, например стан% дартные суффиксы .C, .cc, .cpp, .cxx и .c++. Изредка встречаются файлы заголовков C++ с суффиксом .hpp. Ваше решение может зависеть от компилятора, личных вкусов и/или стандарта коди% рования. Главное – соблюдать единообразие: выберите какую%то систему суффиксов и пользуйтесь ею постоянно.

Однажды мне довелось работать на платформе, которая не под% держивала суффиксы имен файлов. Определять на ней тип фай% ла было сложно и неприятно.

Соблюдайте единообразие

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

class badly_named : public MyBaseClass

{

 

 

 

 

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

 

 

 

 

public:

void doTheFirstThing(); void DoThe2ndThing(); void do_the_third_thing();

};

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

87Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

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

Единообразное именование приводит к интуитивно понятному коду, с которым проще работать, его проще расширять и сопровождать. В ко% нечном счете, управлять таким кодом дешевле.

Связывайте имя с содержимым

Каждое имя, читаемое в своем контексте, должно быть абсолютно по% нятным. И имя всегда будет находиться в известном контексте, поэтому все лишнее, дублирующее контекстную информацию, можно убрать. Нужно стремиться к созданию кратких содержательных имен без лишних довесков.

Источником контекстной информации могут служить:

Область видимости

Объекты располагаются либо на верхнем, глобальном уровне, либо находятся внутри некоторого пространства имен, класса или функ% ции. Выбирайте имя, оправданное в контексте своего уровня. Чем более узкой и конкретной является область видимости, тем проще создать в ней имя, имеющее понятный читателю смысл в контексте этой области. Если функция подсчитывает количество яблок на де% реве и определена в классе Tree (дерево), нет смысла называть ее countApplesInTree(). Она однозначно описывается своим полностью квалифицированным именем: Tree::countApples(). Выбирайте для именуемых сущностей самые мелкие (и потому самые описатель% ные) области видимости.