Хардкод

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Хардкод — херовый стиль программирования, при котором определённые константы оказываются восраны непосредственно в код епта нах.

Описание[править]

Такой подход подразумевает, что изменение таких данных требует редактирования кода, перекомпиляции и повторной сборки программы. При нормальном же подходе данные берутся из конфигурационных файлов, баз данных и переменных окружения, где их отредактировать проще.

В ранних компьютерах логика иногда зашивалась напрямую в схемы, что делало систему жёсткой и негибкой. Из-за этого некоторые старые системы имели весьма ограниченное применение. По аналогии однозначное всирание кода в программу также осуждается.

В общем типичная ситуация, когда разработчик из лени или спешки встраивает значения напрямую, вместо того чтобы вынести их в конфиг. Затем если понадобится отредактировать значения, их придётся натурально искать в программах.

Иногда хардкод оправдывается тем, что отсутствие операций ввода-вывода ускоряет запуск и работу программы. Но на практике же обычно там очень и очень низкое замедление, а вот опускание кода из-за наличия в нём хардкодов происходит весьма значительное.

Проблемы[править]

  • Изменение одного значения (например, налоговой ставки) требует поиска по всему коду. При большом проекте легко пропустить экземпляр.
  • Повторяющиеся литералы (например, 6 как размер массива и минимальная длина пароля) превращаются в источник багов.
  • Захардкоженный путь C:\Program Files\MyApp ломается на других дисках, в Linux или при перенаправлении папок.
  • Строки интерфейса в коде делают перевод адским занятием (нужно редактировать исходники).
  • Хардкод паролей, API-ключей или токенов приводит к утечкам при публикации репозитория на GitHub. Ключи легко извлекаются из бинарника.
  • Нет возможности динамически менять поведение в разных окружениях (dev/staging/prod) без отдельных сборок.
  • Новый разработчик тратит часы, чтобы понять, откуда взялось значение 42 и что оно значит.

Примеры[править]

for i in range(10):  # что значит 10?
    if len(password) < 8:  # а здесь 8?
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++ScalaH и Ё+Программист-бетонщик
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCPИсходный кодSingle-Page ApplicationGiteaForgejoCephIDEДжуниорРепозиторийPostgreSQLSQLiteJQueryБуферWebGLПереполнение буфераХардкод
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.jsОптимизацияТестированиеAmbreon866Реверс-инжинирингКроссплатформенностьJSON
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур ПейпертПроблемаK!ockyTypeScriptОтладчикБитЭффективный менеджер (IT)TauriReact NativeWindows APIТипPyTorchTensorFlowПарсерNode.jsFastAPIVue.jsSvelteБэкендElectronBroken Object Level AuthorizationМаппингДжастин ФранкельHex-редакторVisual Basic .NETNext.jsDocker ComposeNode modulesIndexedDB
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffiВибе-кодингFlutterАппликативный оператор