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.

8voto

yondoo Points 31

Programmation impérative : dire à la "machine" comment faire quelque chose, et en conséquence, ce que vous voulez qu'il se produise se produira.

Programmation déclarative : dire à la "machine" ce que vous voulez qu'il se passe, et laisser l'ordinateur trouver comment le faire.

4voto

Rorick Points 3582
  1. Je pense que votre taxonomie est incorrecte. Il existe deux types opposés : impératif et déclaratif. Le fonctionnel est juste un sous-type du déclaratif. BTW, wikipedia affirme le même fait.
  2. Probablement des langages multiparadigmes qui incorporent des caractéristiques des deux mondes. Je partage donc l'opinion de Jason Baker.
  3. Encore une fois, je partage l'opinion de Jason Baker. jQuery est multiparadigme comme l'est son langage hôte.

4voto

Peter Krauss Points 1888

Comme vous pouvez lire sur jQuery à Wikipedia ,

L'ensemble des fonctionnalités de base de jQuery - sélections, traversées et manipulations d'éléments du DOM -, rendues possibles par son moteur de sélection (...), a créé un nouveau "style de programmation", fusionnant algorithmes et structures de données du DOM.

La question actuelle est probablement juste en se concentrant sur ce point "nouveau style de programmation" ... Donc, pour moi, comme je n'ai pas vu ce point dans d'autres réponses, vous avez deux bonnes réponses possibles,

  1. Ce site nouveau style de programmation est une sorte de flux de données et Programmation pilotée par événements comme awk et XSLT ... Comme la programmation avec les feuilles de calcul modernes, ils sont aussi des exemples de Programmation réactive (non pas "orienté vers les cellules" mais " Orienté DOM-node ").

  2. C'est nouveau est "le style jQuery", il n'y a donc pas de type fonctionnel/déclaratif/impératif à classer. "Fusionner algorithmes et structures de données DOM " est un nouveau paradigme pour les programmeurs Javascript.

3voto

Zorf Points 2931

La programmation déclarative consiste à programmer en exprimant une certaine logique intemporelle entre l'entrée et la sortie, par exemple, en pseudocode, l'exemple suivant serait déclaratif :

def factorial(n):
  if n < 2:
    return 1
  else:
    return factorial(n-1)

output = factorial(argvec[0])

Nous avons simplement défini une relation appelée "factorielle" ici, et défini la relation entre la sortie et l'entrée comme cette relation. Comme cela devrait être évident ici, presque tous les langages structurés permettent la programmation déclarative dans une certaine mesure. L'une des idées centrales de la programmation déclarative est l'immuabilité des données : si vous affectez une variable, vous ne le faites qu'une fois, et jamais plus. D'autres définitions plus strictes impliquent qu'il peut n'y avoir aucun effet secondaire, ces langages sont parfois appelés "purement déclaratifs".

Le même résultat dans un style impératif serait :

a = 1
b = argvec[0]
while(b < 2):
  a * b--

output = a

Dans cet exemple, nous n'avons exprimé aucune relation logique statique intemporelle entre l'entrée et la sortie, nous avons changé manuellement les adresses mémoire jusqu'à ce que l'une d'entre elles donne le résultat souhaité. Il devrait être évident que tous les langages permettent une sémantique déclarative dans une certaine mesure, mais tous ne permettent pas l'impératif, certains langages "purement" déclaratifs permettent les effets secondaires et la mutation.

On dit souvent que les langages déclaratifs spécifient "ce qui doit être fait", par opposition à "comment le faire", mais je pense que c'est une erreur, les programmes déclaratifs spécifient toujours comment aller de l'entrée à la sortie, mais d'une autre manière, la relation que vous spécifiez doit être efficacement calculable (terme important, cherchez-le si vous ne le connaissez pas). Une autre approche est non déterministe qui ne fait que spécifier les conditions auxquelles un résultat doit répondre, avant que votre implémentation n'aille épuiser toutes les voies par essais et erreurs jusqu'à ce qu'elle réussisse.

Les langages purement déclaratifs comprennent Haskell et Pure Prolog. Une échelle mobile de l'un à l'autre serait : Pure Prolog, Haskell, OCaml, Scheme/Lisp, Python, Javascript, C--, Perl, PHP, C++, Pascall, C, Fortran, Assembly

3voto

msmithgu Points 180

Quelques bonnes réponses ici concernant les "types" notés.

Je présente quelques concepts supplémentaires, plus "exotiques", souvent associés à la foule de la programmation fonctionnelle :

  • Langage spécifique au domaine ou DSL Programmation : création d'un nouveau langage pour traiter le problème en question.
  • Métaprogrammation : lorsque votre programme écrit d'autres programmes.
  • Programmation évolutive Le système de gestion de l'information : où l'on construit un système qui s'améliore continuellement ou qui génère des générations de sous-programmes de plus en plus performants.

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