este problema se puede abordar de diversas formas, pero te dejamos la que en nuestra opinión es la respuesta más completa.
La programación declarativa es cuando escribes tu código de tal manera que describe lo que quieres hacer, y no cómo quieres hacerlo. Se deja al compilador averiguar cómo.
Ejemplos de lenguajes de programación declarativos son SQL y Prolog.
Las otras respuestas ya hacen un trabajo fantástico al explicar qué es la programación declarativa, por lo que solo proporcionaré algunos ejemplos de por qué podría ser útil.
Independencia del contexto
Los programas declarativos son independiente del contexto. Debido a que solo declaran cuál es el objetivo final, pero no los pasos intermedios para alcanzar ese objetivo, el mismo programa puede usarse en diferentes contextos. Esto es difícil de hacer con programas imperativos, porque a menudo dependen del contexto (por ejemplo, estado oculto).
Llevar yacc
como ejemplo. Es un generador de analizador aka. compilador compilador, un DSL declarativo externo para describir la gramática de un idioma, de modo que se pueda generar automáticamente un analizador para ese idioma a partir de la descripción. Debido a su independencia del contexto, puedes hacer muchas cosas diferentes con una gramática de este tipo:
- Genere un analizador C para esa gramática (el caso de uso original para
yacc
) - Genere un analizador C++ para esa gramática
- Genere un analizador Java para esa gramática (usando Jay)
- Genere un analizador C# para esa gramática (usando GPPG)
- Genere un analizador Ruby para esa gramática (usando Racc)
- Genere una visualización de árbol para esa gramática (usando GraphViz)
- simplemente haga una impresión bonita, un formato elegante y resaltado de sintaxis del archivo fuente yacc e inclúyalo en su Manual de referencia como una especificación sintáctica de su idioma
Y muchos más …
Mejoramiento
Debido a que no prescribe a la computadora qué pasos debe seguir y en qué orden, puede reorganizar su programa con mucha más libertad, tal vez incluso ejecutar algunas tareas en paralelo. Un buen ejemplo es un planificador de consultas y un optimizador de consultas para una base de datos SQL. La mayoría de las bases de datos SQL le permiten mostrar la consulta que están Realmente ejecutando vs. la consulta que usted pedido ellos para ejecutar. A menudo, esas consultas parecen nada como el uno al otro El planificador de consultas tiene en cuenta cosas con las que ni siquiera habría soñado: la latencia de rotación del plato del disco, por ejemplo, o el hecho de que alguna aplicación completamente diferente para un usuario completamente diferente acaba de ejecutar una consulta similar y la tabla que está unirse y que trabajó tan duro para evitar la carga ya está en la memoria de todos modos.
Aquí hay una compensación interesante: la máquina tiene que trabajar más para averiguar cómo hacer algo de lo que lo haría en un lenguaje imperativo, pero cuando lo hace resolverlo, tiene mucha más libertad y mucha más información para la etapa de optimización.
Flojamente:
La programación declarativa tiende hacia: –
- Conjuntos de declaraciones, o enunciados declarativos, cada uno de los cuales tiene un significado (a menudo en el dominio del problema) y puede entenderse de forma independiente y aislada.
La programación imperativa tiende hacia: –
- Secuencias de comandos, cada uno de los cuales realiza alguna acción; pero que puede o no tener significado en el dominio del problema.
Como resultado, un estilo imperativo ayuda al lector a comprender la mecánica de lo que realmente está haciendo el sistema, pero puede dar poca información sobre el problema que se pretende resolver. Por otro lado, un estilo declarativo ayuda al lector a comprender el dominio del problema y el enfoque que adopta el sistema hacia la solución del problema, pero es menos informativo sobre el tema de la mecánica.
Los programas reales (incluso los escritos en lenguajes que favorecen los extremos del espectro, como ProLog o C) tienden a tener ambos estilos presentes en varios grados en varios puntos, para satisfacer las diversas complejidades y necesidades de comunicación de la pieza. Un estilo no es superior al otro; solo sirven para diferentes propósitos y, como con muchas cosas en la vida, la moderación es key.
Nos puedes asistir nuestro estudio mostrando un comentario y dejando una puntuación te damos las gracias.