Deklarativ programmering är ett programmeringsparadigm där specifikationen av en lösning på ett problem specificeras, det vill säga det förväntade resultatet beskrivs, och inte sättet att få det. Motsatsen till deklarativ är imperativ programmering , där, på en eller annan detaljnivå, krävs en beskrivning av sekvensen av steg för att lösa ett problem. HTML och SQL nämns ofta som exempel på deklarativa språk .
Deklarativa program använder inte begreppet tillstånd, i synnerhet innehåller de inte variabler och uppdragsoperatörer , referenstransparens tillhandahålls . Det närmaste "rent deklarativa" programmering är att skriva körbara specifikationer . I det här fallet är programmet en formell teori , och dess genomförande är samtidigt ett automatiskt bevis på denna teori.[ förtydliga ] ( Curry-Howard korrespondens ), och komponenterna i utvecklingsprocessen som är karakteristiska för imperativ programmering ( design , refactoring , debugging och andra) är uteslutna i detta fall: programmet designar och bevisar sig självt[ förtydliga ] .
Deklarativ programmering inkluderar också ofta funktionell och logisk programmering . Trots det faktum att program på sådana språk ofta innehåller algoritmiska komponenter, är arkitektur i imperativ mening (som något skilt från kodning) också frånvarande i dem: programschemat är direkt en del av den körbara koden [1] .
Språkorienterad programmering syftar till att öka nivån av deklarativitet .
"Rent deklarativa" datorspråk är ofta Turing -ofullständiga, eftersom det teoretiskt sett inte alltid är möjligt att generera körbar kod från en deklarativ beskrivning. Detta leder ibland till dispyter om riktigheten av termen "deklarativ programmering" (mindre kontroversiellt är "deklarativ beskrivning av lösningen" eller motsvarande "deklarativ beskrivning av problemet").