139 votes

Javascript est-il un langage de programmation fonctionnel ?

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...).

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 ;)

183voto

missingfaktor Points 44003

Répétant ma propre réponse à une question similaire,

Il n'y a pas de définition reconnue d'un langage de programmation fonctionnel.

Si vous définissez le langage fonctionnel comme le langage qui supporte les fonctions de première classe et les lambdas, alors oui, JavaScript *est* un langage fonctionnel. langage fonctionnel.

Si vous considérez également les facteurs comme le support de l'immuabilité, les types de données types de données, la correspondance des motifs, l'application l'application partielle, etc, alors non, JavaScript *n'est pas* un langage fonctionnel.


Je vous encourage à lire les articles de blog connexes suivants (et aussi les commentaires qui les suivent) :

1 votes

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

0 votes

JavaScript a la notion de partiels, et de paramètres s'appliquant partiellement, donc je me demande si votre déclaration selon laquelle il ne supporte pas cela est incorrecte ?

2 votes

@OpenLearner, l'application partielle est supportée par à peu près tous les langages auxquels je pense, même le C. Pour une certaine définition de "support" en tout cas. Le cas de JS n'est pas différent. Le point est de savoir si l'application partielle est sans effort et de première classe dans ce langage. En JS, ce n'est pas le cas. Si vous êtes curieux de savoir ce que je veux dire, jetez un coup d'œil à OCaml ou Haskell.

26voto

Niki Yoshiuchi Points 7822

Je dirais que c'est un langage multi-paradigme.

EDIT : Il est multi-paradigme et inclut des constructions fonctionnelles.

0 votes

Oui, je suis d'accord, c'est un mélange de plusieurs choses différentes.

5 votes

Mais cela ne répond pas à la question de savoir si elle est également fonctionnelle. Être multi-paradigme implique de supporter plusieurs paradigmes. L'un de ces paradigmes est-il la programmation fonctionnelle ?

16voto

shuhalo Points 1040

Si vous étirez et déformez le terme "programmation fonctionnelle" au point de susciter des discussions philosophiques, cette question peut être à nouveau ouverte. Cependant, on se retrouve alors au niveau de questions utiles comme "Le C++ est-il vraiment un langage de programmation" ?

La réponse à votre question au quotidien est la suivante "non" .

La programmation fonctionnelle signifie que le programme est conceptualisé comme l'évaluation d'une fonction, plutôt que comme un flux de contrôle. Le code est une description de fonctions, et n'a pas de concept inhérent de flux de contrôle.

JavaScript a un flux de contrôle et est conceptualisé comme un langage impératif. D'après son objectif de conception, il ne s'agit clairement pas d'un langage fonctionnel.

1 votes

Objectif de conception ? Que voulez-vous dire ? La dernière fois que j'ai vérifié, une de ses sources d'inspiration était Scheme. Je dirais qu'il est assez clair que l'un de ses objectifs de conception était de supporter la programmation fonctionnelle. également comme un seau d'autres paradigmes

2 votes

Il supporte la programmation fonctionnelle autant que le C++, si vous écrivez vous-même les bases appropriées pour cela - autant que vous pouvez émuler la syntaxe impérative dans, disons, Haskell avec un peu de travail. Néanmoins, la syntaxe du JavaScript conduit à le considérer comme un flux de travail plutôt que comme l'évaluation d'une fonction. Pour cette raison, je considère (comme la plupart des programmeurs fonctionnels) que l'application du terme "fonctionnel" est trop vaste.

0 votes

@user411768 : donc vous dites que le fait qu'un langage soit fonctionnel ou non dépend de la conception de sa bibliothèque standard ? Je n'ai jamais entendu que définition auparavant. Java possède la plupart des outils nécessaires pour programmer dans un style fonctionnel (fermetures et fonctions anonymes, par exemple), ce qui n'est pas le cas du C++ (actuellement). Je pense que cela fait de JS un langage beaucoup plus FP que ne l'est C++. Le fait que le langage ne soit pas force vous de programmer dans un style FP ne le rend pas "moins fonctionnel", n'est-ce pas ?

9voto

Chuck Points 138930

L'expression "langage de programmation fonctionnelle" est tellement surchargée de nos jours qu'elle en devient presque inutile. Il existe deux significations dominantes :

  1. Fonctions de premier ordre
    • Le Javascript, c'est ça !
  2. est basé sur les fonctions telles qu'utilisées dans le lambda calculus, en mettant l'accent sur l'absence d'état mutable persistant (en le remplaçant souvent par des paramètres passés aux fonctions)
    • Tel qu'il est couramment écrit, Javascript n'est pas du tout cela !

Choisissez votre sens et vous pourrez alors répondre à la question.

0 votes

Existe-t-il une source qui utilise l'expression "programmation fonctionnelle" pour désigner les langages dans lesquels les fonctions sont des citoyens de premier ordre ?

0 votes

@user411768 : En fait, un autre répondant a fait un lien vers l'article de Wikipedia, qui utilise cette définition. fr.wikipedia.org/wiki/Javascript - Joel Spolsky a également donné cette définition dans son billet "Can your programming language do this ?" sur les avantages de la "programmation fonctionnelle".

0 votes

Vous notez que, tel qu'il est couramment écrit, JavaScript n'utilise pas votre deuxième point, mais cela ne signifie certainement pas qu'il n'y a pas de programmeurs qui font exactement cela, et que le langage ne supporte pas une telle fonctionnalité, parce qu'il le fait certainement

2voto

Brian Onn Points 718

Pour moi, Javascript est à la fois un langage impératif et un langage fonctionnel, et vous pouvez choisir de l'utiliser dans les deux sens, et même ( egad ) dans les deux sens. Ou vous pouvez choisir d'utiliser un paradigme et de ne jamais toucher à l'autre. C'est vous qui décidez. Je, comme vous, ne pense pas que Javascript devrait être appelé un langage fonctionnel, car il vous permet d'entrer et de sortir du paradigme de la programmation fonctionnelle. S'il disposait d'une sorte de pragma, pour vous limiter à l'utilisation de paradigmes de programmation fonctionnelle, ce serait utile, je pense. Mais, en résumé, je dirais qu'il s'agit plutôt d'un langage impératif/procédural avec quelques fonctionnalités de programmation fonctionnelle.

0 votes

Selon ce raisonnement, F# ne peut plus être appelé fonctionnel.

1 votes

Bien. Selon Wikipedia, F# est exactement ce que je viens d'appeler Javascript : "F# [...] est un langage de programmation multi-paradigme [...] qui englobe la programmation fonctionnelle ainsi que les disciplines impératives de la programmation orientée objet."

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