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/07 10:59] – [1- fonctions pures] 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 112: | Ligne 112: | ||
* Réutilisation (sans effets de bord) | * Réutilisation (sans effets de bord) | ||
- | === 2- Immutabilité === | + | ==== 2- Immutabilité |
Les données doivent être immutables, c' | Les données doivent être immutables, c' | ||
- | == Exemple d' | + | === Exemple d' |
Ligne 128: | Ligne 128: | ||
</ | </ | ||
- | == Version immutable obtenue par récursion : == | + | === Version immutable obtenue par récursion : === |
Ligne 145: | Ligne 145: | ||
</ | </ | ||
- | == Avantages : == | + | === Avantages : === |
* L' | * L' | ||
- | | + | |
+ | ==== 3- Transparence référentielle ==== | ||
+ | |||
+ | Referential transparency | ||
+ | |||
+ | La transparence référentielle est obtenue grâce aux fonctions pures, et elle consiste à permettre le remplacement d'un appel d'une fonction pure, par la valeur qu' | ||
+ | |||
+ | **Exemple :** | ||
+ | |||
+ | Soit la fonction carré suivante : | ||
+ | <sxh javascript; | ||
+ | const square = (n) => n * n; | ||
+ | </ | ||
+ | |||
+ | Pour la même valeur en entrée, cette fonction pure retournera toujours la même valeur : | ||
+ | |||
+ | <sxh javascript; | ||
+ | square(2);// | ||
+ | square(2);// | ||
+ | square(2);// | ||
+ | // ... | ||
+ | </ | ||
+ | |||
+ | Avec le paramètre '' | ||
+ | |||
+ | <WRAP info> | ||
+ | '' | ||
+ | |||
+ | 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/ |