Le paradigme fonctionnel
Fonction pure et effet de bord, immutabilité, fonctions d'ordre supérieur (map, filter, reduce), composition, récursion à la place de la boucle et évaluation paresseuse : lire un programme écrit avec des fonctions et prévoir ce qu'il rend.
- 30 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
Fonction pure : de quoi s'agit-il ?
Voir la réponse
Fonction dont le résultat ne dépend que de ses arguments et qui ne modifie rien en dehors d'elle : les mêmes arguments donnent toujours le même résultat.
On peut la tester sans préparer d'environnement, la rappeler dans n'importe quel ordre et remplacer l'appel par sa valeur sans changer le programme.
Quelle valeur rend ce code JavaScript ?
```javascript
[1, 2, 3, 4].filter(x => x % 2).map(x => x * 10).reduce((a, b) => a + b)`4060100[10, 30]
Voir la réponse
40x % 2vaut 1 pour les impairs :filtergarde 1 et 3,mapdonne 10 et 30,reduceles additionne : 40. Les pairs donneraient 60, et sansfilteron aurait 100.Une fonction … rend toujours le même résultat pour les mêmes arguments et n'a aucun ….
Voir la réponse
Une fonction pure rend toujours le même résultat pour les mêmes arguments et n'a aucun effet de bord.
Les deux conditions sont nécessaires : une fonction qui lit une variable globale ou l'heure dépend de l'extérieur, une fonction qui modifie son argument agit sur l'extérieur.
Effet de bord : de quoi s'agit-il ?
Voir la réponse
Tout changement qu'une fonction produit hors d'elle en plus de rendre son résultat : modifier une variable extérieure ou un argument, écrire un fichier, afficher, envoyer sur le réseau.
Une fonction sans effet de bord n'est pas forcément pure : celle qui lit l'heure ne modifie rien, mais ne rend plus la même valeur deux fois de suite pour les mêmes arguments.
Une fonction de calcul de prix lit une variable globale « taux de remise ». Un test passe le matin et échoue l'après-midi avec les mêmes arguments, parce qu'un autre module a changé le taux entre-temps. Quelle est la solution ?
- Figer la variable globale avec un verrou pendant l'exécution du test
- Relancer le test plusieurs fois et garder le résultat majoritaire
- Copier la valeur du taux dans une seconde variable globale
- Passer le taux en paramètre de la fonction pour qu'elle ne dépende plus que de ses arguments
Voir la réponse
Passer le taux en paramètre de la fonction pour qu'elle ne dépende plus que de ses arguments
La cause est que le résultat dépend d'un état extérieur, qu'un autre code peut changer. En faisant du taux un argument, la fonction redevient pure : mêmes arguments, même prix, test stable.