473 votes

Qu'est-ce que la programmation fonctionnelle, déclarative et impérative ?

  1. En un mot, ce qui est :

    • Programmation fonctionnelle
    • Programmation déclarative
    • Programmation impérative
  2. Existe-t-il d'autres types (plus exotiques) ?

  3. Quel est le type de jQuery ? J'aime beaucoup ce produit, mais je ne sais pas comment il s'appelle.

25voto

Arturo Herrero Points 3676

Impératif : comment pour atteindre notre objectif

   Take the next customer from a list.
   If the customer lives in Spain, show their details.
   If there are more customers in the list, go to the beginning

Déclaratif : ce que nous voulons atteindre

   Show customer details of every customer living in Spain

23voto

daf Points 5180

Programmation impérative désigne tout style de programmation où votre programme est structuré à partir d'instructions décrivant comment les opérations effectuées par un ordinateur se dérouleront .

Programmation déclarative désigne tout style de programmation où votre programme est une description du problème ou de la solution - mais n'indique pas explicitement comment le travail sera effectué .

Programmation fonctionnelle c'est programmer en évaluant des fonctions et des fonctions de fonctions... Comme la programmation fonctionnelle (strictement définie) consiste à programmer en définissant des fonctions mathématiques sans effets secondaires, il s'agit de est une forme de programmation déclarative mais ce n'est pas le seul type de programmation déclarative .

Programmation logique (par exemple dans Prolog) est une autre forme de programmation déclarative. Elle consiste à calculer en décidant si une déclaration logique est vraie (ou si elle peut être satisfaite). Le programme est généralement une série de faits et de règles, c'est-à-dire une description plutôt qu'une série d'instructions.

Réécriture de termes (par exemple CASL) est une autre forme de programmation déclarative. Elle implique une transformation symbolique de termes algébriques. Elle est complètement distincte de la programmation logique et de la programmation fonctionnelle.

17voto

TheTXI Points 24470

De Wikipedia

En informatique, la programmation déclarative déclarative est un paradigme de programmation qui exprime la logique d'un calcul sans décrire son flux de contrôle. Elle tente de minimiser ou éliminer les effets secondaires en décrivant ce que le programme doit accomplir, plutôt que de décrire comment comment s'y prendre pour l'accomplir. Ce site contraste avec la programmation impérative programmation impérative, qui nécessite une description description détaillée de l'algorithme à exécuter.

La programmation déclarative considère les programmes comme des théories d'une logique logique formelle, et les calculs comme des déductions dans cet espace logique. Déclarative déclarative a suscité un intérêt particulier intérêt particulier récemment, car elle peut simplifier l'écriture de programmes parallèles.

Les langages déclaratifs courants comprennent ceux des expressions régulières, de la logique logique et de la programmation fonctionnelle.

De Wikipedia :

En informatique, la programmation fonctionnelle programmation fonctionnelle est un paradigme de programmation qui traite le calcul comme l'évaluation l'évaluation de fonctions mathématiques et évite l'état et les données mutables. Elle met l'accent sur l'application de fonctions, contrairement à la style de programmation impératif, qui qui met l'accent sur les changements d'état. La programmation fonctionnelle trouve ses racines dans le lambda calculus, un système formel système formel développé dans les années 1930 pour étudier la définition des fonctions, l'application des fonctions et la récursion. De nombreux langages de programmation fonctionnelle peuvent être considérés comme des embellissements du lambda calculus.

De Wikipedia :

En informatique, la programmation impérative programmation impérative est un paradigme de programmation qui décrit le calcul en termes de d'instructions qui modifient l'état programme. De la même manière que le l'impératif dans les langues naturelles exprime des ordres d'action, les programmes impératifs définissent des séquences de commandes que l'ordinateur doit exécuter.

Le terme est utilisé en opposition à la programmation déclarative, qui exprime ce qui doit être fait sans prescrire la manière de le faire en en termes de séquences d'actions à effectuer à entreprendre. Fonctionnel et logique logique sont des exemples d'une approche plus déclarative.

jQuery n'est pas un langage de programmation, c'est une bibliothèque pour le langage de programmation JavaScript.

16voto

dmbarbour Points 176

Réponse 1 :

impératif - les expressions décrivent la séquence d'actions à réaliser (associatif)

déclaratif - les expressions sont des déclarations qui contribuent au comportement du programme (associatif, commutatif, idempotent, monotone)

fonctionnel - Les expressions ont valeur comme seul effet ; la sémantique supporte le raisonnement équationnel

Réponse 2 : Existe-t-il d'autres types (plus exotiques) ?

Il existe de nombreux axes selon lesquels on peut classer les styles de programmation. Je vais simplement citer quelques styles qui me plaisent :

flux de données - Les expressions décrivent la plomberie des données, une sorte de logique spatiale (sources, puits, tuyaux ou fils).

réécriture de (réécriture de termes, réécriture de graphes, système de transition d'états, systèmes de règles) - programme décrivant des règles non déterministes (typiquement non déterministes) pour reconnaître et réécrire une structure de données. Les règles sont déclarées, mais les effets sont très étatiques et impératifs. (Les machines à états semblent faire partie de la classe de réécriture).

logique linéaire (ou types linéaires) - beaucoup plus stricte que la fonctionnelle ; modélisation explicite des effets de l'information (duplication, suppression, etc. comme effets)

logique temporelle (également : réactif synchrone, réactif fonctionnel, calcul des événements discrets) - modélisation explicite du temps ; retard logique, synchronisation logique.

Il existe de nombreux hybrides qui n'ont pas vraiment de style distinct. Les multiméthodes, par exemple, hybrident certains aspects de la répartition logique et de l'action impérative.

14voto

Shelby Moore III Points 2088

Depuis que j'ai écrit ma réponse précédente, j'ai formulé une nouvelle définition de la propriété déclarative qui est citée ci-dessous. J'ai également défini la programmation impérative comme la double propriété.

Cette définition est supérieure à celle que j'ai donnée dans ma réponse précédente, car elle est succincte et plus générale. Mais elle peut être plus difficile à comprendre, car les implications des théorèmes d'incomplétude applicables à la programmation et à la vie en général sont difficiles à comprendre pour les humains.

L'explication citée de la définition discute du rôle pur la programmation fonctionnelle joue dans la programmation déclarative.

Tous les types exotiques de programmation s'inscrivent dans la taxonomie suivante de déclaratif contre impératif, puisque la définition suivante affirme qu'ils sont duaux.

Je ne m'y connais pas assez en jQuery pour le commenter.

Déclaratif et impératif

La propriété déclarative est étrange, obtuse et difficile à saisir dans une définition techniquement précise qui reste générale et non ambiguë, car il s'agit d'une notion naïve selon laquelle nous pouvons déclarer la signification (alias la sémantique) du programme sans encourir d'effets secondaires involontaires. Il existe une tension inhérente entre l'expression de la signification et l'évitement d'effets non intentionnels, et cette tension découle en fait de l'approche de la sémantique du programme. théorèmes d'incomplétude de la programmation et de notre univers.

C'est une simplification excessive, une imprécision technique et souvent une ambiguïté de définir le déclaratif comme " ce qu'il faut faire " et impératif comme " comment faire " . Un cas ambigu est le " ce que " est le " comment " dans un programme qui produit un programme - un compilateur.

De toute évidence, le la récursion sans limite qui rend un langage complet de Turing est également analogue dans la sémantique - et pas seulement dans la structure syntaxique de l'évaluation (a.k.a. sémantique opérationnelle). C'est logiquement un exemple analogue au théorème de Gödel- " tout système complet d'axiomes est aussi inconsistant ". Réfléchissez à la bizarrerie contradictoire de cette citation ! C'est aussi un exemple qui démontre comment l'expression de la sémantique n'a pas de borne prouvable, donc on ne peut pas prouver . 2 qu'un programme (et par analogie sa sémantique) s'arrête, c'est-à-dire le théorème de Halting.

Les théorèmes d'incomplétude découlent de la nature fondamentale de notre univers, qui, comme l'indique la deuxième loi de la thermodynamique, est " l'entropie (a.k.a. le nombre de possibilités indépendantes) a tendance à être maximale pour toujours ". Le codage et la conception d'un programme ne sont jamais terminés - ils sont vivants !- parce qu'ils tentent de répondre à un besoin du monde réel, et la sémantique du monde réel est toujours en train de changer et de tendre vers plus de possibilités. Les humains ne cessent jamais de découvrir de nouvelles choses (y compris des erreurs dans les programmes ;-).

Pour saisir précisément et techniquement cette notion souhaitée dans cet univers étrange qui n'a pas de limites (réfléchissez-y ! Il n'y a pas d'"extérieur" à notre univers), il faut une définition laconique mais trompeusement pas simple qui semblera incorrecte jusqu'à ce qu'elle soit expliquée en profondeur.

Définition :


La propriété déclarative est celle où il ne peut exister qu'un seul ensemble possible de déclarations pouvant exprimer chaque sémantique modulaire spécifique.

La propriété impérative 3 est le dual, où la sémantique est inconsistante sous composition et/ou peut être exprimée avec des variations d'ensembles d'énoncés.


Cette définition du déclaratif est distincte local dans la portée sémantique, ce qui signifie qu'elle exige qu'une sémantique modulaire conserve sa signification cohérente, quels que soient l'endroit et la manière dont elle est instanciée et employée dans le cadre de l'initiative mondial l'étendue. Ainsi, chaque sémantique modulaire déclarative devrait être intrinsèquement orthogonale à toutes les autres possibles - et non une impossible (en raison des théorèmes d'incomplétude). mondial algorithme ou modèle pour témoigner de la cohérence, ce qui est également le point de " Plus n'est pas toujours mieux " par Robert Harper, professeur d'informatique à l'université Carnegie Mellon, l'un des concepteurs de Standard ML.

Parmi les exemples de ces sémantiques déclaratives modulaires, on peut citer les foncteurs de la théorie des catégories, par ex. le site Applicative Il s'agit de la programmation fonctionnelle, du typage nominal, des espaces de noms, des champs nommés et, en ce qui concerne le niveau opérationnel de la sémantique, de la programmation fonctionnelle pure.

Ainsi, les langages déclaratifs bien conçus peuvent exprimer plus clairement le sens Il s'agit d'un système de gestion de l'information, avec une certaine perte de généralité dans ce qui peut être exprimé, mais un gain dans ce qui peut être exprimé avec une cohérence intrinsèque.

Un exemple de la définition susmentionnée est l'ensemble des formules dans les cellules d'un tableur - qui ne sont pas censées donner la même signification lorsqu'elles sont déplacées dans différentes colonnes et rangées de cellules, c'est-à-dire que les identificateurs de cellule sont modifiés. Les identificateurs de cellule font partie du sens voulu et ne sont pas superflus. Ainsi, chaque résultat de feuille de calcul est unique par rapport aux identificateurs de cellule dans un ensemble de formules. La sémantique modulaire cohérente dans ce cas est l'utilisation des identificateurs de cellule comme entrée et sortie de pur pour les formules de cellules (voir ci-dessous).

Le langage HTML (Hyper Text Markup Language) - le langage des pages web statiques - est un exemple de langage hautement (mais pas parfaitement) sophistiqué. 3 ), un langage déclaratif qui (au moins avant HTML 5) ne permettait pas d'exprimer un comportement dynamique. Le HTML est peut-être le langage le plus facile à apprendre. Pour un comportement dynamique, un langage de script impératif tel que JavaScript était généralement combiné à HTML. Le HTML sans JavaScript correspond à la définition déclarative car chaque type nominal (c'est-à-dire les balises) conserve sa signification cohérente lors de la composition dans le cadre des règles de la syntaxe.

Une définition concurrente du déclaratif est le commutatif et idempotent les propriétés des énoncés sémantiques, c'est-à-dire que les énoncés peuvent être réordonnés et dupliqués sans en changer le sens. Par exemple, les instructions attribuant des valeurs à des champs nommés peuvent être réorganisées et dupliquées sans changer le sens du programme, si ces noms sont modulaires par rapport à tout ordre implicite. Les noms impliquent parfois un ordre, par exemple les identificateurs de cellules incluent leur position en colonne et en ligne - déplacer un total sur la feuille de calcul change sa signification. Sinon, ces propriétés requièrent implicitement mondial la cohérence de la sémantique. Il est généralement impossible de concevoir la sémantique des énoncés de manière à ce qu'ils restent cohérents s'ils sont ordonnés ou dupliqués de manière aléatoire, car l'ordre et la duplication sont intrinsèques à la sémantique. Par exemple, les énoncés "Foo existe" (ou construction) et "Foo n'existe pas" (et destruction). Si l'on considère que l'incohérence aléatoire est endémique de la sémantique visée, alors on accepte cette définition comme suffisamment générale pour la propriété déclarative. En substance, cette définition est vide en tant que définition généralisée parce qu'elle tente de rendre la cohérence orthogonale à la sémantique, c'est-à-dire de défier le fait que l'univers de la sémantique est dynamiquement non limité et ne peut pas être capturé dans une définition de la propriété déclarative. mondial paradigme de la cohérence.

Le fait d'exiger les propriétés commutatives et idempotentes pour l'ordre d'évaluation structurel de la sémantique opérationnelle de niveau inférieur convertit la sémantique opérationnelle en un langage déclaratif. localisé sémantique modulaire, par exemple pur la programmation fonctionnelle (y compris la récursion au lieu des boucles impératives). Ensuite, l'ordre opérationnel des détails de la mise en œuvre n'a pas d'incidence (c'est-à-dire que la diffusion à l'échelle mondiale dans) la cohérence de la sémantique de niveau supérieur. Par exemple, l'ordre d'évaluation (et théoriquement aussi la duplication) des formules du tableur n'a pas d'importance parce que les sorties ne sont pas copiées sur les entrées avant que toutes les sorties aient été calculées, c'est-à-dire de manière analogue aux fonctions pures.

C, Java, C++, C#, PHP et JavaScript ne sont pas particulièrement déclaratifs. La syntaxe de Copute et celle de Python sont plus déclaratives. couplé à résultats escomptés c'est-à-dire une sémantique syntaxique cohérente qui élimine le superflu afin que l'on puisse facilement comprendre le code après l'avoir oublié. Copute et Haskell imposent le déterminisme de la sémantique opérationnelle et encouragent le " ne vous répétez pas vous " (DRY), car ils ne permettent que le paradigme fonctionnel pur.


2 Même lorsqu'il est possible de prouver la sémantique d'un programme, par exemple avec le langage Coq, cela se limite à la sémantique qui est exprimée en la dactylographie et le typage ne peut jamais capturer toute la sémantique d'un programme - même pour les langages qui ne sont pas complets au sens de Turing, par exemple avec HTML+CSS, il est possible d'exprimer des combinaisons incohérentes qui ont donc une sémantique indéfinie.

3 De nombreuses explications affirment à tort que seule la programmation impérative comporte des déclarations syntaxiquement ordonnées. J'ai clarifié ce point confusion entre programmation impérative et fonctionnelle . Par exemple, l'ordre des déclarations HTML ne réduit pas la cohérence de leur signification.

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