190 votes

Ce qui est programmation déclarative ?

J’entends ce terme ballotté dans plusieurs contextes différents. Qu'est-ce que c'est ?

146voto

1800 INFORMATION Points 55907

Programmation déclarative est lorsque vous écrivez votre code de telle sorte qu’elle décrit ce que vous voulez faire, et pas comment vous voulez le faire. Il est laissé le compilateur de comprendre le comment. Exemples de langages de programmation déclaratives sont SQL et Prolog.

79voto

Jörg W Mittag Points 153275

Les autres réponses ont déjà fait un travail fantastique en expliquant ce que la programmation déclarative est, donc je vais juste vous donner quelques exemples de pourquoi cela pourrait être utile.

Contexte De L'Indépendance

Déclarative Programmes sont indépendants du contexte. Parce qu'ils viennent de déclarer que le but ultime est, mais pas les étapes intermédiaires pour atteindre cet objectif, le même programme peut être utilisé dans différents contextes. C'est dur à faire avec des programmes impératifs, parce que souvent ils dépendent du contexte (par exemple, état caché).

Prendre en yacc comme un exemple. C'est un analyseur générateur d'alias. compilateur compilateur externe déclarative DSL pour décrire la grammaire d'une langue, de sorte qu'un analyseur syntaxique pour que la langue peut être automatiquement généré à partir de la description. En raison de son contexte d'indépendance, vous pouvez faire beaucoup de choses différentes avec une telle grammaire:

  • Générer un C analyseur pour que la grammaire (à l'origine de cas d'utilisation pour l' yacc)
  • Générer un analyseur C++ pour que la grammaire
  • Générer un Java analyseur pour que la grammaire (à l'aide de Jay)
  • Générer un C# analyseur pour que la grammaire (à l'aide de GPPG)
  • Générer un Rubis analyseur pour que la grammaire (à l'aide de Racc)
  • Générer un arbre de visualisation pour que la grammaire (à l'aide de GraphViz)
  • tout simplement certains d'impression, de fantaisie-mise en forme et la coloration syntaxique de la yacc fichier source lui-même et de l'inclure dans votre Manuel de Référence comme un syntaxiques les spécifications de votre langue

Et beaucoup plus ...

Optimisation

Parce que vous n'avez pas prescrire de l'ordinateur qui les mesures à prendre et dans quel ordre, il peut réorganiser votre programme beaucoup plus librement, peut-être même d'exécuter certaines tâches en parallèle. Un bon exemple est un planificateur de requête et l'optimiseur de requête pour une base de données SQL. La plupart des bases de données SQL permet d'afficher la requête qu'ils sont en fait de l'exécution de vs la requête que vous avez demandé à exécuter. Souvent, ces requêtes look rien aimer les uns les autres. Le planificateur de requête prend les choses en compte le fait que vous n'aurait même pas rêvé: latence rotation du plateau de disque, par exemple, ou le fait que certains complètement différent de l'application pour un de complètement différent de l'utilisateur juste exécuté une requête similaire et la table à laquelle vous rejoindre et que vous avez travaillé si dur pour éviter le chargement est déjà dans la mémoire de toute façon.

Il y a un intéressant compromis ici: la machine doit travailler plus fort pour comprendre comment faire quelque chose à ce qu'elle serait dans un langage impératif, mais quand il ne figure it out, il a beaucoup plus de liberté et plus d'informations pour l'optimisation de la scène.

23voto

William Payne Points 430

Vaguement:

Programmation déclarative tend vers:-

  • Jeux de déclarations, ou des énoncés déclaratifs, dont chacune a un sens (souvent dans le domaine du problème) et peut être compris de manière indépendante et dans l'isolement.

La programmation impérative tend vers:-

  • Les séquences de commandes, qui effectue une certaine action; mais ce qui peut ou peut ne pas avoir de sens dans le domaine du problème.

Comme un résultat, d'un impératif de style, permet au lecteur de comprendre la mécanique de ce que le système est en train de faire, mais peut donner un petit aperçu du problème qu'elle est censée résoudre. D'autre part, un style déclaratif aide le lecteur à comprendre le domaine du problème et l'approche que le système prend vers la solution du problème, mais est moins informatif sur la question de mécanique.

Programmes immobiliers (même ceux écrits dans des langues qui favorisent les extrémités du spectre, tels que ProLog ou C) ont tendance à avoir les deux styles présents à des degrés divers, à différents points, afin de satisfaire les différentes complexités et les besoins de communication de la pièce. Un style n'est pas supérieur à l'autre, ils s'en servent à des fins différentes, et, comme beaucoup de choses dans la vie, la modération est la clé.

12voto

skaffman Points 197885

Grossièrement, il signifie spécification logique en ce qui concerne les règles et les faits, plutôt que les instructions.

11voto

Shelby Moore III Points 2088

Je suis désolé, mais je suis en désaccord avec la plupart des autres réponses. Je voudrais arrêter cette confuse de l'incompréhension de la définition de la programmation déclarative.

Définition

La transparence référentielle (RT) de la sous-expressions est le seul requis attribut d'une programmation déclarative expression, car c'est le seul attribut qui n'est pas partagée avec la programmation impérative.

D'autres cités attributs de la programmation déclarative, dérivent de cette RT. Veuillez cliquer sur le lien hypertexte ci-dessus pour une explication détaillée.

Exemple de feuille de calcul

Deux réponses mentionnées feuille de calcul de la programmation. Dans le cas où la feuille de calcul de la programmation (un.k.un. les formules) n'a pas accès à mutable global de l'état, alors il est declarating de programmation. C'est parce que la mutable valeurs des cellules sont les monolithique d'entrée et de sortie de la "main()" (l'ensemble du programme). Les nouvelles valeurs ne sont pas écrites dans les cellules après chaque formule est exécutée, donc ils ne sont pas mutables pour la durée de vie du programme déclaratif (exécution de toutes les formules dans la feuille de calcul). Ainsi, les uns par rapport aux autres, les formules de vue ces mutable cellules comme immuable. Un RT fonction est autorisé à accéder immuable de l'état global (et aussi mutable local de l'état).

Ainsi, la capacité de muter les valeurs dans les cellules lorsque le programme se termine (comme une sortie de la "main()"), ne pas faire mutable valeurs stockées dans le contexte des règles. La principale distinction est la cellule de valeurs ne sont pas mis à jour après chaque feuille de calcul formule est effectuée, ainsi, l'ordre d'exécuter les formules n'a pas d'importance. Les valeurs des cellules sont mis à jour après le déclaratif des formules ont été effectuées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X