Хардкод (от англ. hard code, «жёстко закодировать») — это когда конкретное значение вписывают прямо в исходный код программы, вместо того чтобы вынести его в переменную, константу или конфигурацию. Пароль, IP-адрес, ставка налога, путь к файлу, число 151 в условии — если это «зашито» в код и меняется только правкой самого кода, перед вами хардкод. В большинстве случаев это антипаттерн: код становится жёстким, хрупким и опасным в поддержке.
Коротко, что важно понять о хардкоде:
- это встраивание данных прямо в код вместо конфигурации или переменной;
- главная беда — любое изменение значения требует править и пересобирать программу;
- хардкод паролей и API-ключей — прямая дыра в безопасности;
- лечится константами, конфиг-файлами и переменными окружения;
- в прототипах и для настоящих неизменных констант он допустим.
Если вы только осваиваете разработку — например, через вайбкодинг в Cursor или в Claude Code, — понимание хардкода отделяет черновой скрипт от кода, который не стыдно отдать в прод.
Что такое хардкод простыми словами
Хардкод — это вставка конкретных значений напрямую в программу так, что изменить их можно только через правку кода. По определению из Википедии, это «практика встраивания данных непосредственно в исходный код программы или другой исполняемый объект».
Представьте номер телефона поддержки, вписанный в 15 файлов сайта. Меняется номер — программисту приходится искать и править все 15 мест и заново выкатывать сайт. Если бы номер лежал в одном конфигурационном файле, обновление заняло бы одну строку. Разница между этими двумя мирами и есть цена хардкода.
Глагол, который вы услышите в командах: «захардкодить», «это захардкожено». Значения, которые чаще всего хардкодят по неопытности, — числовые лимиты, ставки и коэффициенты, строки интерфейса, пути к папкам, адреса серверов и, что хуже всего, секреты.

- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
- Где и как применять? Потестируем модель после установки на разных задачах
- Как дообучить модель под себя?
Почему хардкод — это плохо
Хардкод считается антипаттерном не из вкусовщины, а из-за конкретных последствий.
- Трудность поддержки. Захардкоженное значение живёт в коде, и чтобы его поменять, нужен программист, редактор и пересборка — вместо правки одной строки в настройках.
- Дублирование и рассинхрон. Одно и то же число часто повторяется в разных местах. Поменяли в одном, забыли в трёх — получили плавающий баг, который тяжело поймать.
- Низкая гибкость. Программа с зашитым путём
C:\Program Files\Appсломается, если пользователь ставит её на другой диск; код с зашитой папкой «My Documents» падает в локализованной Windows, где папка называется «Documenti». - Дыры в безопасности. Пароли и API-ключи, вписанные в код, утекают вместе с ним в публичные репозитории и создают скрытые бэкдоры. Это одна из самых частых причин компрометации проектов.
Именно за эти симптомы захардкоженный код часто разрастается в «спагетти-код» — запутанный и трудно поддерживаемый. Хардкодинг закономерно попал в список классических грехов разработчика на Хабре.
Пример хардкода: плохо → хорошо
Начнём с исходного примера — площади квадрата на Python. Сторона зашита прямо в функцию:
# Плохо: значение захардкожено внутри функции def calculate_square_area(): side_length = 5 # поменять размер = править код return side_length ** 2 print(calculate_square_area())
Стоит вынести значение в параметр — и функция становится переиспользуемой для любого квадрата:
# Хорошо: значение приходит снаружи def calculate_square_area(side_length): return side_length ** 2 print(calculate_square_area(5)) print(calculate_square_area(12))
То же самое с бизнес-логикой. Скидка «0.9» в коде ничего не говорит читателю — это магическое число:
# Плохо def final_price(price): return price * 0.9 # что за 0.9? # Хорошо DISCOUNT_RATE = 0.10 # скидка 10% постоянному клиенту def final_price(price): return price * (1 - DISCOUNT_RATE)
На JavaScript типичный хардкод — «числа из воздуха» в таймерах и лимитах:
// Плохо setTimeout(retry, 300); // Хорошо const RETRY_DELAY_MS = 300; setTimeout(retry, RETRY_DELAY_MS);
Хардкод и магические числа
Магическое число — частный случай хардкода: числовой литерал без имени и объяснения прямо в логике (151, 0.9, 86400). Проблема не в самом числе, а в потерянном контексте: через месяц ни автор, ни коллега не вспомнят, что оно значит и можно ли его трогать.
Лечение простое — дать значению имя-константу с единой точкой правды:
// Плохо: что за 151? const caughtAll = (n) => n === 151; // Хорошо: смысл виден, правится в одном месте const TOTAL_POKEMON = 151; const caughtAll = (n) => n === TOTAL_POKEMON;
Константы принято писать в ВЕРХНЕМ_РЕГИСТРЕ и держать вверху файла или в отдельном модуле — так их легко найти и поменять. Это и есть единый источник истины: правите число на одной строке, а не ищете его по всему проекту.
Как избежать хардкода: константы, конфиги и переменные окружения

Выбор инструмента зависит от того, что за значение вы выносите.
| Тип значения | Куда выносить | Пример |
| Неизменное в рамках кода | Именованная константа | MAX_RETRIES = 3 |
| Зависит от среды (dev/prod) | Конфиг-файл (.env, config.json) | URL API, порт, таймауты |
| Секрет (пароль, ключ, токен) | Переменная окружения / секрет-хранилище | DATABASE_URL, API_KEY |
| Текст интерфейса | Файлы локализации (i18n) | Строки под перевод |
Секреты никогда не должны попадать в код. Вместо строки подключения с паролем внутри —
# Плохо: пароль в коде и в истории git db = connect("postgres://admin:P@ssw0rd@10.0.0.5:5432/app") # Хорошо: значение берётся из окружения import os db = connect(os.environ["DATABASE_URL"])
Сам DATABASE_URL задаётся в файле .env, который добавлен в .gitignore и не уезжает в репозиторий. Для разных сред — свои значения переменных окружения, а код остаётся одним и тем же.
Практический порядок действий, когда наткнулись на захардкоженное значение: найдите литерал → дайте ему имя → решите, меняется ли он по среде (если да — в конфиг) → секрет ли это (если да — в переменную окружения). Этот путь показан на схеме ниже.
Когда хардкод допустим
Бороться с хардкодом до фанатизма не нужно — иногда он оправдан:
- Настоящие константы. Физические и математические величины (число π, число секунд в минуте, количество дней в неделе) не меняются — выносить их в конфиг бессмысленно, достаточно именованной константы.
- Быстрые прототипы и одноразовые скрипты. Когда важна скорость проверки гипотезы, а код проживёт один день, ранняя параметризация — преждевременная оптимизация.
- Значения, у которых по смыслу нет альтернатив. Номер версии, зафиксированный формат, служебные метки.
Граница простая: если значение может измениться, зависит от среды или является секретом — выносим. Если оно неизменно по своей природе и используется в одном месте — жёсткое значение с понятным именем допустимо.
Частые вопросы о хардкоде
Что такое хардкод простыми словами?
Это значение (число, строка, пароль, путь), вписанное прямо в код так, что изменить его можно только правкой и пересборкой программы, а не через настройки.
Почему хардкод считается плохой практикой?
Он усложняет поддержку, плодит дублирование и рассинхрон, снижает гибкость и создаёт риски безопасности, когда в код попадают пароли и ключи.
Чем хардкод отличается от магического числа?
Магическое число — частный случай хардкода: безымянный числовой литерал в логике. Хардкодом могут быть и строки, пути, секреты, а не только числа.
Когда хардкод допустим?
Для настоящих неизменных констант, в быстрых прототипах и одноразовых скриптах, а также для значений, у которых по смыслу нет вариативности.
Как убрать хардкод из кода?
Вынести значение в именованную константу; параметры среды — в конфиг-файл; секреты — в переменные окружения; тексты интерфейса — в файлы локализации.
Хардкод — не преступление, а сигнал: значение стоит вынести туда, где его удобно и безопасно менять. Освоить такие привычки письма кода помогает практика — в том числе с ИИ-ассистентами вроде Claude Code, которые подсказывают, где логику пора вынести из «зашитого» вида.
- Выполним базовые задачи на российских нейросетях и посмотрим на результаты!
- Файл-инструкцию «Как сделать нейро-фотосессию из своего фото бесплатно, без иностранных карт и прочих сложностей»
- Покажем 10+ способов улучшить свою жизнь с ИИ каждому — от ребенка и пенсионера до управленца и предпринимателя
- Возможность получить Доступ в Нейроклуб на целый месяц
- Как ИИ ускоряет работу и приносит деньги
- За 2 часа вы получите четкий план, как начать работать с ИИ прямо сейчас!
- Освой нейросеть Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
- УЧАСТВОВАТЬ ЗА 0 РУБ.
- Расскажем, как получить подписку
- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ