Имена нужны повсюду в коде. Как программистам, нам приходится давать имена классам, переменным, функциям, параметрам, пространствам имён и так далее. Вот 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 соответственно. Методы, возвращающие boolean, должны иметь префикс '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