La programmation fonctionnelle est un paradigme déclaratif. L'un des points forts de la PF est que les effets secondaires sont évités. On dit que pour certains problèmes, la PF ne convient pas.
Pour quels problèmes courants la programmation fonctionnelle ne convient-elle pas?
Réponses:
Applications de nature très dynamique. Les jeux vidéo en sont un bon exemple car ils modélisent le monde réel. Il est beaucoup plus logique de penser à modifier l'état du monde au lieu de reconstruire à partir de l'état précédent chaque fois que quelque chose change.
Un exemple concret serait de changer la santé d'un monstre après avoir été abattu. Il est beaucoup plus judicieux de simplement modifier sa santé que de la remplacer par un monstre entièrement nouveau qui est le même dans tous les sens, sauf qu'il a maintenant moins de santé. Ce genre de changements constitue à peu près tout dans un monde de jeu, et le faire de manière purement fonctionnelle n'est pas très intuitif. J'imagine qu'il peut y avoir des pénalités de performance importantes, du moins si vous le faites dans un langage purement fonctionnel.
(En remarque, certains problèmes dans les jeux sont très bien adaptés à la programmation fonctionnelle, comme l'IA. Un langage hybride fonctionnel / impératif conviendrait parfaitement à ces cas.)
la source
La programmation intégrée en temps réel concerne les effets secondaires. Interagissant avec les io numériques et analogiques, les minuteries, les ports série et parallèles, tout ce qui est intéressant se fait en appelant des fonctions avec des effets secondaires.
la source
Je dirais que la programmation GUI n'est pas un bon choix pour la programmation fonctionnelle. Les interfaces graphiques sont généralement très dynamiques, et il est beaucoup plus facile de les modéliser / gérer en utilisant l'état plutôt que d'utiliser un effet secondaire gratuit. Il est certainement possible d'utiliser un langage de programmation fonctionnel pour les interfaces graphiques ... mais ce n'est probablement pas une bonne idée.
Comme indiqué dans une autre réponse, les jeux sont souvent plus faciles à gérer en suivant l'état, et bien que vous puissiez écrire un jeu dans un langage fonctionnel, il est souvent plus facile et plus efficace de le faire dans un langage «avec état» (c'est-à-dire orienté objet la langue).
la source
Applications métier pilotées par les données. L'interface utilisateur et les opérations de données simples n'ont pas besoin de FP.
la source
filter
,reduce
etmap
. Ajoutez à cela certainssort
,partition
,groupBy
. Après tout, le langage de programmation le plus utilisé pour écrire de telles applications est Excel, qui est un langage fonctionnel.Vous ne pouvez pas facilement ignorer un ensemble de problèmes non adapté à la programmation fonctionnelle en soi.
Cela dépend beaucoup du langage réel utilisé pour la programmation fonctionnelle et de ses fonctionnalités.
Un exemple est l'Erlang déjà mentionné pour les systèmes embarqués en temps réel.
La plénitude de l'état n'est pas non plus un bon critère contre la programmation fonctionnelle, il existe plusieurs façons efficaces de les gérer dans les langages de programmation fonctionnels.
Les effets secondaires sont également souvent mentionnés contre la programmation fonctionnelle. Chaque programme qui n'est pas totalement solipsiste a des effets secondaires. Donc, chaque langage de PF du monde réel a un moyen de faire face à cela, c'est seulement une question d'élégance pour encapsuler les effets secondaires du monde.
Il n'y a aucun besoin d'effets secondaires arbitraires comme des variables globales.
Mais il existe des ensembles de problèmes qui facilitent l'accès à la programmation fonctionnelle, car ils ne déforment pas autant votre façon habituelle de voir le problème. Mais une fois que vous parvenez à penser que les ensembles de problèmes fonctionnels sont de plus en plus ouverts à moins d'effets secondaires.
Même lors de la programmation de C, c'est toujours une bonne idée de réduire autant que possible les effets secondaires arbitraires comme les variables globales.
la source