Для мене пошук хорошого імені для чогось завжди повертається до роздуму про це як про предмет, який має виправдати його існування. Запитайте себе:
- Що робить клас / метод / змінна, тобто яка її ширша мета і для чого це?
- Що конкретно щодо його мети потрібно повідомляти, тобто яка є найважливішою частиною, яку має містити ім’я?
Більшість розробників погодиться з тим, що читабельність завжди має першорядне значення, коли справа стосується іменування. Не просто записуйте код, щоб ви знали, що ви маєте на увазі під час його написання, напишіть його так, щоб хтось, хто вперше в якийсь момент, дивлячись на код, знав, що ви мали на увазі, не задумуючись надто багато. Ви напишете код лише один раз, але протягом його життя його, швидше за все, доведеться редагувати багато разів і читати ще більше разів.
Код повинен бути самодокументуванням, тобто ваше називання повинно дати зрозуміти, що щось робить. Якщо вам потрібно пояснити, що робить рядок коду в коментарі, а перейменування речей недостатньо покращить його, слід серйозно розглянути можливість рефакторингу цієї лінії в новий метод із відповідним описовим іменем, щоб читати оригінальний метод, новий виклик методу описує те, що відбувається. Не бійтеся мати довгі імена; звичайно, ви не повинні писати романи в назви класів / методів / змінних, але я вважаю за краще, щоб ім’я було занадто довгим і описовим, ніж занадто коротким, і мені потрібно з'ясувати, що це робить, заглядаючи під капот. За винятком явних винятків, таких як координати x / y та часто використовувані абревіатури, уникайте одноіменних імен та скорочень. Викликати щось "bkBtn" замість "backButton"
Наскільки дозволяє ваша мова, зробіть свій код прочитаним як англійське речення. Об’єкти використовують іменники, методи використовують дієслова. Булеві методи, як правило, починаються з "є", але існує багато інших варіантів, які передають значення ще краще, залежно від випадку використання, наприклад "може", "повинен" або "робить". Звичайно, не всі мови можуть бути настільки ж хорошими, як Smalltalk, але деякі символи, як правило, розуміються як частини речення. Дві конвенції Smalltalk, які я особисто якнайбільше використовую в інших мовах, - це префіксація назви параметрів циклу "кожний", а також параметри методу префіксації статтею "a" (або "an", або "some" для колекцій) . Це не може бути звичайним стандартом на Java, і кожен бажає ігнорувати цей біт, але я вважаю, що це значно підвищує читабельність коду. Наприклад (на прикладі Java):
public boolean shouldConsiderAbbreviating(List<String> someNames) {
for (String eachName : someNames) {
if (isTooLong(eachName)) {
return true;
}
}
return false;
}
Це має бути зрозумілим людям, які лише трохи знають Java як щось подібне:
Щоб визначити, чи слід розглядати скорочення списку деяких імен (які є рядками), перебирайте деякі імена та для кожного імені визначайте, чи занадто він довгий; якщо так, поверніть true
; якщо жодна не надто довга, поверніться false
.
Протиставляйте вищевказаний код просто називаючи аргумент strings
та змінну циклу string
, особливо у більш складному методі. Вам доведеться придивитися уважно, щоб побачити різницю, а не використання очевидного з першого погляду на назву.