Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
cnam:utc503:declarative:fonctionnelle [2023/11/09 19:26] – [3- Transparence référentielle] jcheron | cnam:utc503:declarative:fonctionnelle [2023/11/10 07:27] (Version actuelle) – jcheron | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
Basée sur l' | Basée sur l' | ||
- | La prog fonctionnelle n' | + | La prog fonctionnelle n' |
Les langages fonctionnels sont ceux vouent un culte à ces principes ou sont basés sur eux : | Les langages fonctionnels sont ceux vouent un culte à ces principes ou sont basés sur eux : | ||
Ligne 174: | Ligne 174: | ||
Avec le paramètre '' | Avec le paramètre '' | ||
- | < | + | < |
- | pure functions + immutable data = referential transparency | + | '' |
+ | |||
+ | Grâce à ce concept, il est possible de memoïzer (https:// | ||
</ | </ | ||
+ | |||
+ | ==== 4- Fonction d' | ||
+ | |||
+ | Fonctions objet de première classe ou Functions as first-class entities : | ||
+ | |||
+ | Une fonction est un type de données (callback) et peut-être passée en paramètre d'une fonction ou être retournée par une fonction. | ||
+ | |||
+ | Les fonctions qui en manipulent d' | ||
+ | |||
+ | **Exemple :** | ||
+ | |||
+ | Considérons les fonctions suivantes : | ||
+ | |||
+ | <sxh javascript; | ||
+ | const doubleSum = (a, b) => (a + b) * 2; | ||
+ | const doubleSubtraction = (a, b) => (a - b) * 2; | ||
+ | </ | ||
+ | |||
+ | Nous pourrions considérer que nous avons 3 fonctions : | ||
+ | * somme | ||
+ | * soustraction | ||
+ | * double qui peut utiliser la soustraction, | ||
+ | |||
+ | <sxh javascript; | ||
+ | const | ||
+ | sum = (a, b) => a + b; | ||
+ | const subtraction = (a, b) => a - b; | ||
+ | const doubleOperator = (f, a, b) => f(a, b) * 2; | ||
+ | |||
+ | doubleOperator(sum, | ||
+ | doubleOperator(subtraction, | ||
+ | </ | ||
+ | |||
+ | **doubleOperator** est une fonction d' | ||
+ | |||
+ | ==== 5- Monades ==== | ||
+ | |||
+ | Structure permettant de manipuler des langages fonctionnels purs dans des traits impératifs. | ||
+ | |||
+ | **Exemples :** | ||
+ | |||
+ | * Result may or may not exist: solved by the Maybe monad. | ||
+ | * Nondeterministic number of result: solved by the List monad. | ||
+ | * Outside world interaction: | ||
+ | * Eventual result: solved by the Promise/ | ||
+ | * Dependence on state: solved by the State monad. | ||
+ | * Errors: solved by the Error monad. | ||
+ | |||
+ | ===== Applications ===== | ||
+ | |||
+ | * [[https:// | ||
+ | programming-with-js/ | ||
+ |