58 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
aliases:
 | 
						|
  - programmation fonctionnelle
 | 
						|
---
 | 
						|
up:: [[paradigme de programmation|paradigme]]
 | 
						|
#s/informatique 
 | 
						|
 | 
						|
> [!definition] programmation fonctionnelle
 | 
						|
> La programmation fonctionnelle est un paradigme de programmation dans lequel :
 | 
						|
> - les programmes sont exprimés comme des arbres d'expressions
 | 
						|
> - le contrôle de flot est fait en combinant des fonctions plutôt qu'en assignant des valeurs
 | 
						|
>     - utiliser des [[fonction d'ordre supérieur]]
 | 
						|
>     - ne pas utiliser d'[[programmation.état|état]] 
 | 
						|
>     - ne pas utiliser d'entrée/sortie cachée (en sortant du champ local)
 | 
						|
> - les fonctions sont (le plus souvent, le plus possible) [[fonction pure|pures]] (limiter au maximum / complètement [[programmation.effet de bord|effet de bord]])
 | 
						|
^definition
 | 
						|
 | 
						|
# Définitions
 | 
						|
 | 
						|
> [!cite]+ [Programming Paradigms](zotero://select/groups/5383243/items/XUWRH447) - [Page ](zotero://open-pdf/groups/5383243/items/LQGLTH3D?annotation=8L7P34B2)
 | 
						|
> In functional programming, control flow is expressed by combining function calls, rather than by assigning values to variables:
 | 
						|
> ^8L7P34B2aLQGLTH3Dg5383243
 | 
						|
 | 
						|
> [!cite]+ [What Is Functional Programming?](zotero://select/groups/5383243/items/TLUTFXJ8) - [Page ](zotero://open-pdf/groups/5383243/items/8P4TX53J?annotation=IU2KWY7L)
 | 
						|
> Functional programming is about writing pure functions, about removing
 | 
						|
> hidden inputs and outputs as far as we can, so that as much of our
 | 
						|
> code as possible just describes a relationship between inputs and
 | 
						|
> outputs.
 | 
						|
> ^IU2KWY7La8P4TX53Jg5383243
 | 
						|
 | 
						|
> [!cite]+ [Why Functional Programming Matters](zotero://select/groups/5383243/items/6RZUZSFR) - [Page 1](zotero://open-pdf/groups/5383243/items/H9SGRTMQ?page=1&annotation=WSXGN3RM)
 | 
						|
> ![[images/zotero/5383243WSXGN3RM.png|500]]
 | 
						|
> 
 | 
						|
> > [!note] Notes
 | 
						|
> > programme écrit comme des fonctions qui reçoivent l'entrée en argument et renvoie le résultat.
 | 
						|
> ^WSXGN3RMaH9SGRTMQg5383243p1
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Avantages
 | 
						|
 | 
						|
La programmation fonctionnelle permet :
 | 
						|
 | 
						|
- d'éviter les [[programmation.effet de bord|effets de bord]], puisqu'ils sont intertits / impossibles.
 | 
						|
    - une fonction n'a aucun autre effet que de calculer son résultat
 | 
						|
    - ordre d'éxécution indifférent
 | 
						|
        - aucun [[programmation.effet de bord|effet de bord]] ne peut changer la valeur d'une expression, elle peut être évaluée n'importe quand
 | 
						|
        - permet de ne pas s'occuper du contrôle de flot
 | 
						|
    - permet de remplacer une expression par sa valeur sans changer le résultat
 | 
						|
- d'être plus proche du formalisme mathématique
 | 
						|
    - les fonctions en programmation sont proches des fonctions en programmation fonctionnelle
 | 
						|
    - cela permet de mieux appliquer les théories mathématiques
 | 
						|
 | 
						|
> [!cite]+ [Why Functional Programming Matters](zotero://select/groups/5383243/items/6RZUZSFR) - [Page 1](zotero://open-pdf/groups/5383243/items/H9SGRTMQ?page=1&annotation=58PSUPND)
 | 
						|
> ![[images/zotero/538324358PSUPND.png|500]]
 | 
						|
> ^58PSUPNDaH9SGRTMQg5383243p1
 | 
						|
 |