La programación declarativa es un paradigma de programación en el que se especifica la especificación de una solución a un problema, es decir, se describe el resultado esperado, y no la forma de obtenerlo. Lo opuesto a la declarativa es la programación imperativa , en la que, a un nivel de detalle u otro, se requiere una descripción de la secuencia de pasos para resolver un problema. HTML y SQL se citan comúnmente como ejemplos de lenguajes declarativos .
Los programas declarativos no utilizan el concepto de estado, en particular, no contienen variables y operadores de asignación , se proporciona transparencia referencial . Lo más parecido a la programación "puramente declarativa" es escribir especificaciones ejecutables . En este caso, el programa es una teoría formal , y su ejecución es al mismo tiempo una prueba automática de esta teoría.[ aclarar ] ( correspondencia Curry-Howard ), y los componentes del proceso de desarrollo característicos de la programación imperativa ( diseño , refactorización , depuración y otros) quedan excluidos en este caso: el programa se diseña y se prueba a sí mismo[ aclarar ] .
La programación declarativa también incluye a menudo programación funcional y lógica . A pesar de que los programas en tales lenguajes a menudo contienen componentes algorítmicos, la arquitectura en el sentido imperativo (como algo separado de la codificación) también está ausente en ellos: el esquema del programa es directamente parte del código ejecutable [1] .
La programación orientada al lenguaje tiene como objetivo aumentar el nivel de declaratividad .
Los lenguajes informáticos "puramente declarativos" suelen ser Turing -incompletos, ya que teóricamente no siempre es posible generar código ejecutable a partir de una descripción declarativa. Esto a veces conduce a disputas sobre la corrección del término "programación declarativa" (menos controvertido es "descripción declarativa de la solución" o, de manera equivalente, "descripción declarativa del problema").