Имена нужны повсюду в коде. Как программистам, нам приходится давать имена классам, переменным, функциям, параметрам, пространствам имён и так далее. Вот 20 советов, которые помогут вам улучшить навыки именования.

20-naming-rules

1. Используйте имена, выражающие намерение

Имена должны сообщать нам, что делает сущность, зачем она существует и как работает. Выбор имён, раскрывающих намерение, облегчит нам понимание кода.

int d; // elapsed time in days

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

В приведённом выше фрагменте мы можем узнать, что обозначает переменная d, только из комментария. Поэтому читателям кода приходится искать её вхождения, чтобы получить подсказки и понять её смысл. Следовательно, если мы удачно назовём эту переменную, читатели кода сразу поймут её смысл.

2. Не бойтесь тратить время на выбор имён

Стоит перепробовать несколько разных имён, пока они не будут достаточно точно описывать свой смысл, и никогда не бойтесь тратить на это время. Те, кто позже будет читать ваш код (включая вас самих), только выиграют от этого. Кроме того, описательное имя может даже помочь вам яснее представить себе устройство модуля. Хорошее именование действительно требует времени, но в долгосрочной перспективе выгода перевешивает затраты.

3. Переименование (рефакторинг имён)

Если позже в процессе разработки вы придумаете более удачное имя, не сомневайтесь — просто измените его. Современные IDE делают переименование чрезвычайно простым.

4. Избегайте шумовых слов в именах

Например,Manager、Processor、Data、Infoи синонимы выражения «я не знаю, как это назвать» — всё это шумовые слова. Если вам приходится использовать эти шумовые слова, это означает, что ваши имена, возможно, слишком избыточны.

5. Остерегайтесь классов/функций, которые сложно назвать

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

  • Код делает слишком много.
  • Код делает слишком мало.
  • Вы ещё недостаточно хорошо понимаете проблему и вам нужно собрать больше информации.

6. Имена классов

Классы должны иметь имена, являющиеся существительными или именными словосочетаниями, напримерCustomer、WikiPage、AccountиAddressParserСуперклассам при наследовании следует давать короткие, броские имена. Имена подклассов должны быть длиннее и использовать прилагательные, описывающие их отличие от суперкласса, напримерSavingsAccountпроизводные от Account.

7. Имена переменных

Имена переменных также должны быть существительными. Большинство из них образованы от класса, к которому они относятся. Булевы переменные следует записывать как предикаты, напримерisEmptyиisTerminated, что делает их более понятными в операторах if.

8. Имена методов

Имена методов должны быть глаголом или глагольной фразой, напримерpostPayment()、deletePage()иsave()Аксессоры и мутаторы должны иметь префиксы get и set соответственно. Методы, возвращающие булевы значения, должны иметь префикс 'is', например isPostable(), чтобы их было легко понимать в операторах if.

9. Размер области видимости и длина имени переменной

Длина имени переменной должна соответствовать размеру её области видимости. Если переменная имеет небольшую область видимости, её имя должно быть коротким. И наоборот, имя должно быть длиннее и более описательным.

10. Размер области видимости и длина имени метода/класса

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

11. Одна концепция — одно слово

Выберите одно слово для абстрактного понятия и затем не меняйте его. Например, как эквивалентные методы в разных классах,get()、fetch()andretrieve()может сбивать с толку. Единообразная терминология — важный инструмент для программистов в управлении кодом.

12. Не используйте одно и то же слово для двух разных понятий

Если вы следуете пункту 11 — принципу «одно понятие — одно слово» — вы можете избежать многих классов с одинаковым именем метода. Пока списки параметров и возвращаемые значения различных методов семантически эквивалентны, проблемы нет. Проблемы возникают только тогда, когда вы используете одно и то же слово для двух разных понятий.

Например, мы можем использоватьadd()метод в нескольких классах, чтобы создать новое значение путём сложения или конкатенации двух существующих значений. Если позже нам понадобится ввести метод add в классе, чтобы добавить параметр в коллекцию, это вызовет проблемы из-за другой семантики. Лучше переименовать этот новый метод в insert().

13. Используйте имена из области решения

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

14. Используйте имена из предметной области задачи

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

15. Добавляйте осмысленный контекст

Большинство имён сами по себе бессмысленны, и их нужно помещать в контекст (класс/функция/пространство имён), чтобы читатели понимали, к чему они относятся. В некоторых случаях может потребоваться добавить префикс к именам, чтобы добавить контекст. Например, предположим, у нас есть несколько переменных, используемых для представления адреса:firstName、lastName、street、houseNumber、city、stateиzip. Если мы посмотрим только на переменную state, трудно понять, что она означает. Лучшее решение — инкапсулировать эти переменные в классе Address.

16. Не добавляйте неоправданный контекст

Пока смысл ясен, краткие имена обычно лучше длинных, поэтому не добавляйте контекст без необходимости. Имена не должны содержать префиксы с ненужной информацией, которую можно вывести из класса/пакета/пространства имён.

17. Избегайте кодирования

Учитывая возможности современных IDE, нам больше не нужно кодировать информацию о типе и области видимости в имена переменных и классов. Это включает и ненужность добавления 'I' к интерфейсам, потому что пользователям кода не нужно знать, что их класс передаётся в интерфейс. Так что если вы всё же должны использовать кодирование, лучше кодировать реализацию, а не интерфейс.

18. Избегайте вводящей в заблуждение информации

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

19. Избегайте непроизносимых имён

Программирование — социальная деятельность; использование непроизносимых имён только затруднит наши обсуждения.

20. Используйте имена, которые легко искать

Использование коротких, общих имён затрудняет поиск нужных вещей в кодовой базе. Это сильно влияет на нашу способность манипулировать кодом и выполнять рефакторинг.

Наконец, если у вас есть другое мнение, пожалуйста, поделитесь им.

Источник: http://www.codeceo.com/article/20-naming-tips-programmer-know.html