Hårdkodning

Hårdkodning är en programmeringsterm som innebär att ett eller flera värden i ett datorprogram inte kan ändras, till skillnad mot värden som kan omdefinieras i konfigurationsfiler eller databaser, i samband med att programmet startas eller som programmet hämtar från operativsystemet eller på annat sätt kan anpassa under körningen. Hårdkodning innebär att man inte använder variabler vilkas värden dynamiskt kan ändras utan istället skriver det önskade värdet som sådant (en så kallad litteral konstant) i programmets källkod.

Ifråga om till exempel inbyggda system kan man med hårdkodning mena att någonting är kodat rent fysiskt, såsom genom hur komponenter kopplats.

Nivå av hårdkodning

Hårdkodade värden inne i programkoden

Ett visst värde kan anges explicit i programkoden då värdet skall användas. Detta är det enklaste sättet att ange värdet och används ofta i preliminär kod eller i samband med tester. Det hårdkodade värdet kan bli kvar av misstag, slarv eller för att värdet ifråga inte anses behöva kunna ändras.

Om värdet definieras som en konstant, men också en hårdkodad variant används någonstans i programmet, kan resultatet bli svårhittade fel, i synnerhet om det hårdkodade värdet används bara i specialfall.

Konstanter

Normal praxis är att definiera konstanter i början av programmet (då konstanten används i en enstaka programfil i ett litet program), i särskilda definitionsfiler (* .h, * .def e.d.) eller i styrfilerna för själva kompileringen. Då konstanten inte är specifik för programmet ifråga definieras den i allmänhet genom externa programbibliotek eller deras definitionsfiler.

Hårdkodning som konstanter definierade på logiska ställen i källkoden är inte ett stort problem i de fall konstanten inte normalt behöver ändras annat än av experter med tillgång till källkoden. Detta gäller till exempel för fria serverprogram för unixliknande system.

Ifråga om " proprietär programvara", såsom den mesta programvaran för Windows, har den som använder programmet sällan möjlighet att ändra i koden eller ens att få tillverkaren att ändra koden. Var i koden värdet är definierat är då av mindre betydelse, värdet är ändå svårt att anpassa till olika behov.

Hårdkodad logik

I vissa fall är programmet skrivet att utnyttja antaganden om speciella egenskaper hos en storhet. Om ett program implicit använder det faktum att födelsedatum och kön framgår ur det svenska personnumret kan programmet vara svårt anpassa till andra länders system – eller för utländska medborgare i Sverige. Om detta faktum däremot används i en särskild modul och födelsedatum och kön lagras i skilda variabler, kan modulen lätt bytas ut mot en som använder andra system. Jämför portering.

Variabeltyper

Ett särskilt problem gäller de situationer då inte värdet i sig är hårdkodat, men däremot det hur det representeras i programmet. Årtal kan ofta representeras som två siffror, men detta blir ohållbart då längre tider skall hanteras. Variabler som representeras i 32 bit hanteras effektivt på 32 bits maskiner, men kan leda till problem vid övergång till 64 bit.

Hurdana variabeltyper som skall väljas och hur typerna skall kodas är ofta ett svårt problem, då effektivitetsaspekter, samspel mellan olika programbibliotek och olika programmeringstraditioner spelar in. Väldefinierade gränssnitt är dock viktiga för att minimera problemen; implicita antaganden bör undvikas så långt som möjligt.

Alternativ

I allmänhet kan olika värden då programmet startas läsas in från en konfigurationfil, där de vid behov lätt kan ändras, eventuellt också som omgivningsvariabler och som flaggor då programmet startas. Val av metoder varierar beroende på hur ofta värdet bedöms kunna ändras. Förvalda värden kan vara inbyggda som konstanter i programmet, så att bara ändrade värden behöver anges på andra sätt.

Operativsystemet kan erbjuda sätt att hämta olika värden, till exempel fås hemkatalogen i Unix genom biblioteksanropet getpwent och genom omgivningsvariabeln HOME. Det förra används då man är beroende av ett korrekt värde, den senare då man vill erbjuda flexibilitet åt användaren. Motsvarande funktion finns i Windows.

Ofta kan programmets egna rutiner för olika ändamål ersättas med externa program eller programbibliotek. I Unix är det praxis att låta användaren välja sin textredigerare, också till exempel vid skrivande av e-post och ifyllande av webblanketter. Programmets egen slumptalsgenerator eller matematikbibliotek kan ofta med fördel bytas mot externa program eller programbibliotek, då goda sådana finns tillgängliga.

Andra Språk
English: Hard coding
español: Hard code
italiano: Codifica fissa
עברית: Hard coding
português: Hard code
中文: 寫死