A voir également:
- La difference
- Difference tcp udp - Guide
- Difference million milliard - Accueil - Technologies
- Difference entre mo et mb ✓ - Forum Matériel & Système
- Difference actif et en ligne messenger - Forum Facebook Messenger
- Différence actif et en ligne messenger ✓ - Forum Facebook
2 réponses
Bonjour.
Une langue fonctionnelle (idéalement) te permet d'écrire une fonction mathématique, c'est-à-dire une fonction qui prend des arguments de n et renvoie une valeur. Si le programme est exécuté, cette fonction est évaluée.
Un langage procédural, d'autre part, exécute une série d'étapes séquentielles, où le programme fonctionnel serait niché. Il y a une manière de transformer la logique séquentielle en logique fonctionnelle appelée la suite passant le style.
Par conséquent, un programme purement fonctionnel rapporte toujours la même valeur pour une entrée, et l'ordre de l'évaluation n'est pas bien défini ; ce qui signifie qu'il est difficile de modeler des valeurs incertaines comme l'entrée d'utilisateur ou des valeurs aléatoires dans des langues purement fonctionnelles.
@+.
Une langue fonctionnelle (idéalement) te permet d'écrire une fonction mathématique, c'est-à-dire une fonction qui prend des arguments de n et renvoie une valeur. Si le programme est exécuté, cette fonction est évaluée.
Un langage procédural, d'autre part, exécute une série d'étapes séquentielles, où le programme fonctionnel serait niché. Il y a une manière de transformer la logique séquentielle en logique fonctionnelle appelée la suite passant le style.
Par conséquent, un programme purement fonctionnel rapporte toujours la même valeur pour une entrée, et l'ordre de l'évaluation n'est pas bien défini ; ce qui signifie qu'il est difficile de modeler des valeurs incertaines comme l'entrée d'utilisateur ou des valeurs aléatoires dans des langues purement fonctionnelles.
@+.
Avec une programmation procédurale on manipule des variables en mémoire, et on en modifie les valeurs dans toute une série d'instructions pour arriver au résultat. On aura donc tendance à privilégier les boucles pour modifier plusieurs fois les données.
Avec une programmation fonctionnelle on ne manipule que des valeurs qui passent directement des paramètres vers le résultat de la fonction. Tout passe donc dans la pile, ce qui incite donc plutôt une programmation récursive.
De plus la programmation fonctionnelle permet d'utiliser le lambda-calcul, c'est à dire de passer en argument des valeurs, (parfois d'autres fonctions) sans en connaitre le type, ce qui n'est pas possible en procédural puisque cette valeur devrait être stocké en mémoire et donc avoir un type précis, ce qui n'est pas nécessaire en fonctionnel.
Cela donne des programmes généralement assez différents.
Exemple : calcul de la valeur minimal d'un tableau (d'entiers de type int) en Java
Exemple : calcul de la valeur minimal d'une liste (d'éléments quelconque) en Caml
Remarque : aucun de ces deux codes ne prend en compte le cas où le tableau (ou la liste) est initialement vide, alors que les deux vont planter dans ce cas particulier.
Cependant en Caml, ce cas particulier est signalé dès la conception du code...
La confiance n'exclut pas le contrôle
Avec une programmation fonctionnelle on ne manipule que des valeurs qui passent directement des paramètres vers le résultat de la fonction. Tout passe donc dans la pile, ce qui incite donc plutôt une programmation récursive.
De plus la programmation fonctionnelle permet d'utiliser le lambda-calcul, c'est à dire de passer en argument des valeurs, (parfois d'autres fonctions) sans en connaitre le type, ce qui n'est pas possible en procédural puisque cette valeur devrait être stocké en mémoire et donc avoir un type précis, ce qui n'est pas nécessaire en fonctionnel.
Cela donne des programmes généralement assez différents.
Exemple : calcul de la valeur minimal d'un tableau (d'entiers de type int) en Java
int minimum(int[] tab)
{
int min = tab[0];
for (int i=1; i<tab.length; i++)
if (tab[i]<min)
min = tab[i];
return min;
}
Exemple : calcul de la valeur minimal d'une liste (d'éléments quelconque) en Caml
let rec min_aux x = function
|[] -> x
|t::q -> if (t<x)
then min_aux t q
else min_aux x q;;
let minimum = function t::q -> min_aux t q;;
Remarque : aucun de ces deux codes ne prend en compte le cas où le tableau (ou la liste) est initialement vide, alors que les deux vont planter dans ce cas particulier.
Cependant en Caml, ce cas particulier est signalé dès la conception du code...
La confiance n'exclut pas le contrôle