Javascript est-il un langage fonctionnel? Je sais qu'il a des objets et que vous pouvez aussi faire de la programmation orientée objet, mais est-ce aussi un langage fonctionnel, peut-il être utilisé de cette manière?
Parfois, les gens vont parler de programmation fonctionnelle, alors qu’il s’agit de programmation impérative ou de programmation procédurale . À proprement parler, la programmation fonctionnelle est:
En informatique, la programmation fonctionnelle est un paradigme de la programmation qui considère le calcul comme une évaluation de fonctions mathématiques et évite les données d’état et mutables . Il met l'accent sur l'application de fonctions, contrairement au style de programmation impératif, qui met l'accent sur les changements d'état. La programmation fonctionnelle trouve ses racines dans le lambda calcul, un système formel mis au point dans les années 1930 pour étudier la définition, l'application et la récursivité des fonctions. De nombreux langages de programmation fonctionnels peuvent être considérés comme des élaborations du calcul lambda.
Bien que Javascript ne soit pas largement connu ou utilisé comme langage fonctionnel, il comporte certains éléments fonctionnels :
JavaScript a beaucoup en commun avec Scheme. C'est un langage dynamique. Il a un type de données flexible (tableaux) qui peut facilement simuler des expressions s. Et plus important encore, les fonctions sont lambdas.
Scheme est un dialecte de Lisp et est probablement l'un des langages auxquels la plupart des programmeurs pensent lorsqu'ils discutent de programmation fonctionnelle. En matière d' orientation d'objet , Javascript est un langage orienté objet. Mais son orientation objet est basée sur un prototype :
La programmation par prototype est un style de programmation orientée objet dans laquelle les classes ne sont pas présentes. La réutilisation des comportements (appelée héritage dans les langages basés sur les classes) est effectuée via un processus de clonage d'objets existants qui servent de prototypes. Ce modèle peut également être appelé programmation sans classe, orientée prototype ou instance. La délégation est la fonctionnalité de langage qui prend en charge la programmation basée sur un prototype.
Donc, bien que Javascript soit orienté objet, il ne suit pas le plus courant modèle basé sur les classes , pas plus que les langages tels que C ++, C #, Java et PHP (et quelques autres). Et bien sûr, c'est aussi un langage impératif, ce qui crée une confusion avec la programmation fonctionnelle que j'ai décrite ci-dessus.
Vous savez comment la programmation orientée objet est devenue / semble être la prochaine évolution de la programmation. Cela signifie-t-il que la "programmation fonctionnelle" constitue la prochaine évolution?
L’orientation objet et la programmation fonctionnelle ne sont que deux exemples parmi tant d'autres. paradigmes de programmation , ce sont des styles de programmation différents avec des concepts et des abstractions différents. Le mot clé est "différent". Il n’existe pas de paradigme unique qui soit meilleur que les autres ou plus évolué que d’autres, chacun correspond à certains scénarios mieux que les autres. Certains sont peut-être plus âgés que d'autres, mais en termes d'évolution, cela les rend meilleurs, car ils ont survécu plus longtemps. Mais ce n'est pas une façon très intelligente de voir les choses.
Javascript, comme je l'ai décrit ci-dessus et dans de nombreux autres langages, est multi-paradigme. Il vous permet d'écrire du code dans un style impératif, orienté objet et fonctionnel, basé sur un prototype. C'est à vous de choisir lequel convient le mieux à votre projet. Il existe également plusieurs langages de paradigme uniques, l'exemple canonique étant Java, qui permet uniquement la programmation orientée objet basée sur les classes. 1 .
Vous devriez vraiment résister à toute envie de traiter les langues et les paradigmes comme des déclarations de mode. Il y a une abudance de merde là-bas, la plupart du temps écrite par des fanboys / fangirls ou des gens du marketing, avec très peu de connaissances (voire aucune) et de compréhension de la programmation. Des termes tels que "meilleur", "plus évolué", etc., ne s'appliquent tout simplement pas.
J'apprends mieux par des exemples. Peut-être que quelqu'un pourrait montrer qu'il exécute la même tâche de manière POO, puis de manière programmée, pour comprendre et comparer ce que la programmation fonctionnelle fait / est.
Ce serait une façon terrible d'apprendre. L’orientation fonctionnelle et l’objet sont des styles assez différents, et tout exemple autre que terriblement simple ne s’adapterait pas à l’un ou l’autre style.
1 Mais récemment, tente d’étendre sa portée à la programmation générique, voyons comment cela se passe.
En conclusion:
- Concentrez-vous sur l'apprentissage du Javascript, c'est un langage magnifique et extrêmement utile. Apprenez la langue, pas le battage médiatique.
- Plusieurs paradigmes différents, tous également utiles. A vous de choisir lequel vous préférez et lequel convient le mieux à votre projet.
- Si vous souhaitez apprendre la programmation fonctionnelle, choisissez un langage plus adapté, tel que Scheme ou Clojure . Mais vous devez d'abord comprendre les concepts mathématiques impliqués.
- Faites des recherches avant de demander. La plupart de vos questions trouvent une réponse dans les articles correspondants de Wikipedia. Savoir faire des recherches et poser des questions est une compétence extrêmement importante pour tout programmeur.