J'ai vraiment du mal à comprendre la différence entre les paradigmes de programmation procédurale et fonctionnelle .
Voici les deux premiers paragraphes de l'entrée Wikipedia sur la programmation fonctionnelle :
En informatique, la programmation fonctionnelle est un paradigme de programmation qui traite le calcul comme l'évaluation de fonctions mathématiques et évite les données d'état et mutables. Il met l'accent sur l'application des fonctions, contrairement au style de programmation impératif, qui met l'accent sur les changements d'état. La programmation fonctionnelle a ses racines dans le calcul lambda, un système formel développé dans les années 1930 pour étudier la définition de fonction, l'application de fonction et la récursivité. De nombreux langages de programmation fonctionnels peuvent être considérés comme des élaborations sur le calcul lambda.
En pratique, la différence entre une fonction mathématique et la notion de «fonction» utilisée dans la programmation impérative est que les fonctions impératives peuvent avoir des effets secondaires, modifiant la valeur de l'état du programme. De ce fait, ils manquent de transparence référentielle, c'est-à-dire qu'une même expression de langage peut donner des valeurs différentes à des moments différents en fonction de l'état du programme en cours d'exécution. Inversement, dans le code fonctionnel, la valeur de sortie d'une fonction ne dépend que des arguments qui sont entrés dans la fonction, donc appeler une fonction
f
deux fois avec la même valeur pour un argumentx
produira le même résultatf(x)
les deux fois. L'élimination des effets secondaires peut faciliter la compréhension et la prédiction du comportement d'un programme, ce qui est l'une des principales motivations du développement de la programmation fonctionnelle.
Au paragraphe 2 où il est dit
Inversement, dans le code fonctionnel, la valeur de sortie d'une fonction dépend uniquement des arguments qui sont entrés dans la fonction, donc appeler une fonction
f
deux fois avec la même valeur pour un argumentx
produira le même résultat lesf(x)
deux fois.
N'est-ce pas exactement le même cas pour la programmation procédurale?
Que faut-il rechercher dans la procédure par rapport au fonctionnel qui se démarque?