Хардкод
Хардкод — херовый стиль программирования, при котором определённые константы оказываются восраны непосредственно в код епта нах.
Описание[править]
Такой подход подразумевает, что изменение таких данных требует редактирования кода, перекомпиляции и повторной сборки программы. При нормальном же подходе данные берутся из конфигурационных файлов, баз данных и переменных окружения, где их отредактировать проще.
В ранних компьютерах логика иногда зашивалась напрямую в схемы, что делало систему жёсткой и негибкой. Из-за этого некоторые старые системы имели весьма ограниченное применение. По аналогии однозначное всирание кода в программу также осуждается.
В общем типичная ситуация, когда разработчик из лени или спешки встраивает значения напрямую, вместо того чтобы вынести их в конфиг. Затем если понадобится отредактировать значения, их придётся натурально искать в программах.
Иногда хардкод оправдывается тем, что отсутствие операций ввода-вывода ускоряет запуск и работу программы. Но на практике же обычно там очень и очень низкое замедление, а вот опускание кода из-за наличия в нём хардкодов происходит весьма значительное.
Проблемы[править]
- Изменение одного значения (например, налоговой ставки) требует поиска по всему коду. При большом проекте легко пропустить экземпляр.
- Повторяющиеся литералы (например, 6 как размер массива и минимальная длина пароля) превращаются в источник багов.
- Захардкоженный путь C:\Program Files\MyApp ломается на других дисках, в Linux или при перенаправлении папок.
- Строки интерфейса в коде делают перевод адским занятием (нужно редактировать исходники).
- Хардкод паролей, API-ключей или токенов приводит к утечкам при публикации репозитория на GitHub. Ключи легко извлекаются из бинарника.
- Нет возможности динамически менять поведение в разных окружениях (dev/staging/prod) без отдельных сборок.
- Новый разработчик тратит часы, чтобы понять, откуда взялось значение 42 и что оно значит.
Примеры[править]
for i in range(10): # что значит 10?
if len(password) < 8: # а здесь 8?