cnam:utc503:declarative:fonctionnelle

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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] jcheroncnam:utc503:declarative:fonctionnelle [2023/11/10 07:27] (Version actuelle) jcheron
Ligne 5: Ligne 5:
 Basée sur l'utilisation des fonctions, à la condition de respecter certains principes. Basée sur l'utilisation des fonctions, à la condition de respecter certains principes.
  
-La prog fonctionnelle n'admet pas le changement d'états et la mutation des données(contrairement à la prog impérative).+La prog fonctionnelle n'admet pas le changement d'états et la mutation des données (contrairement à la prog impérative).
  
 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'est-à-dire que leur valeur ne peut changer après initialisation. Les données doivent être immutables, c'est-à-dire que leur valeur ne peut changer après initialisation.
  
-== Exemple d'itération avec variables mutables : ==+=== Exemple d'itération avec variables mutables : ===
  
  
Ligne 128: Ligne 128:
 </sxh> </sxh>
  
-== Version immutable obtenue par récursion : ==+=== Version immutable obtenue par récursion : ===
  
  
Ligne 145: Ligne 145:
 </sxh> </sxh>
  
-== Avantages : ==+=== Avantages : ===
  
  
   * L'exécution d'un prog n'est plus dépendant des changements d'état   * L'exécution d'un prog n'est plus dépendant des changements d'état
-  + 
 +==== 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'elle retourne,sans perturber le fonctionnement du programme. 
 + 
 +**Exemple :** 
 + 
 +Soit la fonction carré suivante : 
 +<sxh javascript;gutter:false> 
 +const square = (n) => n * n; 
 +</sxh> 
 + 
 +Pour la même valeur en entrée, cette fonction pure retournera toujours la même valeur : 
 + 
 +<sxh javascript;gutter:false> 
 +square(2);//
 +square(2);//
 +square(2);//
 +// ... 
 +</sxh> 
 + 
 +Avec le paramètre ''2'', la fonction ''square'' retourne toujours ''4''. Il est donc possible deremplacer ''square(2)'' par ''4'' : Notre fonction est donc référentiellement transparente. 
 + 
 +<WRAP info> 
 +''pure functions + immutable data = referential transparency'' 
 + 
 +Grâce à ce concept, il est possible de memoïzer (https://en.wikipedia.org/wiki/Memoization) la fonction, pour accroître les performances, en évitant son appel. 
 +</WRAP> 
 + 
 +==== 4- Fonction d'ordre supérieur ==== 
 + 
 +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'autres sont qualifiées d'ordre supérieur. 
 + 
 +**Exemple :** 
 + 
 +Considérons les fonctions suivantes : 
 + 
 +<sxh javascript;gutter:false> 
 +const doubleSum = (a, b) => (a + b) * 2; 
 +const doubleSubtraction = (a, b) => (a - b) * 2; 
 +</sxh> 
 + 
 +Nous pourrions considérer que nous avons 3 fonctions : 
 +  * somme 
 +  * soustraction 
 +  * double qui peut utiliser la soustraction, la somme ou toute autre opération 
 + 
 +<sxh javascript;gutter:false> 
 +const 
 +sum = (a, b) => a + b; 
 +const subtraction = (a, b) => a - b; 
 +const doubleOperator = (f, a, b) => f(a, b) * 2; 
 + 
 +doubleOperator(sum, 3, 1);// 8 
 +doubleOperator(subtraction, 3, 1);// 4 
 +</sxh> 
 + 
 +**doubleOperator** est une fonction d'ordre supérieur. 
 + 
 +==== 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: solved by the IO monad. 
 +  * Eventual result: solved by the Promise/Future monad. 
 +  * Dependence on state: solved by the State monad. 
 +  * Errors: solved by the Error monad. 
 + 
 +===== Applications ===== 
 + 
 +  * [[https://www.codingame.com/playgrounds/2980/practical-introduction-tofunctional- 
 +programming-with-js/pure-functions|Exercices pratiques sur Coding game]] 
  • cnam/utc503/declarative/fonctionnelle.1699351194.txt.gz
  • Dernière modification : il y a 18 mois
  • de jcheron