04Рефакторинг
Улучшение имён в коде
Переименовать сущности так, чтобы код читался как текст: переменные, функции, типы, файлы.
Пройдись по {{scope}} и улучши имена.
Категории имён к проверке
1. Переменные
| Плохо | Хорошо |
|---|---|
data | activeUsers |
temp | pendingPayment |
x, y | xCoord, yCoord (если они координаты) или индексы цикла оставь i, j |
info | конкретное имя |
obj | конкретное имя |
Правила
- Имя описывает что в переменной, не тип
- Длина пропорциональна области видимости:
iок для 3 строк,userIndexнужно для 30 - Не
userObj,userData— простоuser
2. Функции
| Плохо | Хорошо |
|---|---|
process() | validateAndSavePayment() |
handle() | onPaymentSuccess() |
getData() | fetchActiveUsers() (асинхронный) / activeUsers() (сразу есть) |
doStuff() | конкретное имя |
Правила
- Имя — глагол + объект
- Boolean: префикс
is,has,can,should - Чистая функция (без сайд-эффектов): можно существительным (
fullName(user)) - Возвращает массив: множественное число (
activeUsers) - Возвращает Promise: глагол с действием (
fetchUser,loadConfig)
3. Типы и классы
| Плохо | Хорошо |
|---|---|
IUser | User (в TS префикс I устарел) |
UserType | User |
UserDTO | UserPayload или User если совпадает |
AbstractFactory | по роли а не по паттерну |
Правила
- Существительное в единственном числе для одного объекта
- Не повторяй контекст: в файле
user.tsэкспорт называетсяUser, неUserModel
4. Файлы
| Плохо | Хорошо |
|---|---|
utils.ts | разнести: date-utils.ts, string-utils.ts (но лучше специфичнее) |
helpers.ts | то же самое — обычно мусорка |
index.ts | ок только как public API модуля |
User.tsx (React) | kebab-case: user-card.tsx |
5. Константы
// плохо
const MAX = 100;
const URL = "https://...";
// хорошо
const MAX_RETRIES = 3;
const API_BASE_URL = "https://...";
Процесс
- Прочитай {{scope}} один раз с целью "что трудно понять без контекста?"
- Список кандидатов на переименование
- Для каждого:
- Текущее имя
- Что оно действительно представляет (объясни своими словами)
- Новое имя
- Используй IDE refactor → "Rename symbol" (а не Find/Replace)
- Тесты должны пройти после
- Коммить отдельно от других изменений:
refactor: rename X to Y
Анти-паттерны
- Длинные имена для коротких scope'ов:
activeAndValidatedUserAccountForBilling - Сокращения которые ничего не значат:
btn,fn,el(ок) vsmdpqv(нет) - Слова которые не добавляют смысла:
Manager,Handler,Helper,Util - "Венгерская нотация":
strName,intCount— типы и так известны - Имя зависит от реализации:
saveUserToPostgres→ стало MySQL → надо переименовывать
Тест хорошего имени
Если объяснил коду имя и тебе говорят "а почему этого не названо так?" — переименовывай.
Похожие промты
design / branding
Исследование нейминга
Сгенерировать 20-30 кандидатов в разных категориях и оценить по критериям.
brandingnaming
Открыть
Средний30-60 мин
design / design-system
Конвенция имён компонентов
Система имён: Button / IconButton / ButtonGroup, префиксы Base/With/As, namespacing, борьба с MyButton2 и дубликатами.
design-systemnamingconvention
Открыть
Средний30-60 мин
code / refactoring
Read-then-refactor: безопасный рефакторинг
Сначала понять весь код, потом переписать. Без изменения поведения, с проверкой тестами.
refactoringsafetyprocess
Открыть
Средний30-60 мин