Ce n'est pas parce que les fonctions sont des objets de première classe, qu'il existe des fermetures et des fonctions d'ordre supérieur que Javascript mérite d'être appelé un langage de programmation fonctionnelle. La principale chose qui lui manque, à mon avis, ce sont les fonctions pures, et il ne se sent pas comme d'autres langages fonctionnels, comme lisp (bien que ce ne soit pas vraiment une bonne raison pour ne pas être un langage fonctionnel...).
Les versions ultérieures de l'implémentation de JavaScript par Mozilla (à partir de la version 1.7) disposent d'une correspondance de motifs sous la forme d'affectations de déstructuration : developer.mozilla.org/fr/New_in_JavaScript_1.7#section_20
1 votes
Les personnes qui utilisent Common Lisp semblent parfois ne pas aimer penser que Lisp est un langage "fonctionnel".
0 votes
Elle peut accéder à des variables globales susceptibles d'affecter/modifier le résultat d'autres fonctions, niant ainsi l'exigence de remplacement des valeurs/fonctions. Donc, non, ce n'est pas un langage de programmation fonctionnel.
12 votes
@slashmais : Non ! Cela l'empêche seulement d'être un langage purement fonctionnel. ML (au moins les dialectes modernes) sont impurs, aussi - mais personne n'oserait les appeler non fonctionnels ;)
4 votes
Il existe de nombreux langages qui sont communément considérés comme fonctionnels, mais qui ne sont pas purs. Je ne vois pas en quoi c'est une exigence. Si vous voulez être aussi strict, alors la plupart des langages dits POO ne sont pas POO non plus. Vous vous retrouvez avec environ 95% de tous les langages qui sont des langages sans paradigme.
6 votes
Mais pourquoi est-ce important ? Quand je code en C++, je ne me soucie pas de savoir si le langage "est POO" ou non. Je me soucie qu'il ait certaines caractéristiques de POO, et qu'il ait quelques caractéristiques de programmation fonctionnelle, et beaucoup de caractéristiques de programmation impérative, et beaucoup de caractéristiques de programmation générique. Mais qu'il "soit" un langage POO ou un langage FP ou autre chose n'a pas d'importance. De même, lorsque je code en JS, il importe peu qu'il soit FP ou non. Ce qui compte, c'est qu'il supporte un grand nombre de fonctionnalités FP intéressantes. Il semble que ce soit la mauvaise question à poser.
0 votes
@jalf, je suis d'accord avec le sentiment. J'ai juste un pincement au cœur quand les gens mentionnent JS et ensuite disent langage de programmation fonctionnel -- la plupart pensent que c'est un langage de programmation fonctionnel parce que les fonctions sont des objets.....
3 votes
@hvgotcodes : et alors ? Il n'y a absolument aucune règle disant que ça ne l'est pas. Ma règle empirique est que c'est un langage fonctionnel si vous pouvez l'utiliser pour programmer dans un style fonctionnel. Puisque Javascript possède des fonctions de première classe, des fermetures et des lambdas, je crois que c'est possible, et donc, en ce qui me concerne, c'est un langage fonctionnel. Ce n'est pas un langage pur, évidemment, mais ce n'est pas non plus le cas de la plupart des langages que nous considérons typiquement comme FP (SML par exemple). Donc, vraiment, je pense que vous avez juste besoin de vous détendre. Si cela vous fait froncer les sourcils, vous devez consulter un médecin.
3 votes
@jalf, absolument. La motivation de la question était que je voulais savoir ce que mes pairs et les gens qui sont plus intelligents que moi pensent.
0 votes
Il n'y a pas de problème à ce que la réponse soit "il possède certaines caractéristiques du langage fonctionnel, et il en manque d'autres".