|
7 | 7 |
|
8 | 8 | La [curryfication](https://fr.wikipedia.org/wiki/Curryfication) est une technique avancée de travail avec les fonctions. Ce n'est pas seulement utilisé avec JavaScript, mais dans d'autres langages également. |
9 | 9 |
|
10 | | -La curryfication est la transformation de fonctions qui traduit une fonction de la forme `f(a, b, c)` en une fonction de la forme `f(a)(b)(c)`. |
| 10 | +La curryfication est la transformation de fonction qui traduit une fonction de la forme `f(a, b, c)` en une fonction de la forme `f(a)(b)(c)`. |
11 | 11 |
|
12 | | -La curryfication n'appelle pas une fonction. Elle la transforme simplement. |
| 12 | +La curryfication n'appelle pas une fonction ; elle la transforme simplement. |
13 | 13 |
|
14 | | -Voyons d'abord un exemple, pour mieux comprendre de quoi nous parlons, et ensuite mettons en pratique. |
| 14 | +Voyons d'abord un exemple pour mieux comprendre de quoi nous parlons, et mettons ensuite en pratique. |
15 | 15 |
|
16 | 16 | Nous allons créer une fonction d'aide `curry(f)` qui curryfie une fonction `f` à deux arguments. En d'autres mots, `curry(f)` sur une fonction `f(a, b)` la traduit en une fonction qui s'appelle par `f(a)(b)` : |
17 | 17 |
|
@@ -79,7 +79,7 @@ Après ça `log` fonctionne normalement: |
79 | 79 | log(new Date(), "DEBUG", "some debug"); // log(a, b, c) |
80 | 80 | ``` |
81 | 81 |
|
82 | | -...Mais aussi dans la forme curryfiée : |
| 82 | +... mais aussi dans la forme curryfiée : |
83 | 83 |
|
84 | 84 | ```js |
85 | 85 | log(new Date())("DEBUG")("some debug"); // log(a)(b)(c) |
@@ -111,7 +111,7 @@ Donc : |
111 | 111 |
|
112 | 112 | ## Implémentation avancée de la curryfication |
113 | 113 |
|
114 | | -Au vas où vous souhaitiez entrer dans les détails, voici l'implémentation "avancée" de la curryfication pour les fonctions à plusieurs arguments que nous avons pu utiliser plus haut. |
| 114 | +Au cas où vous souhaiteriez entrer dans les détails, voici l'implémentation "avancée" de la curryfication pour les fonctions à plusieurs arguments que nous avons pu utiliser plus haut. |
115 | 115 |
|
116 | 116 | C'est plutôt court : |
117 | 117 |
|
@@ -164,8 +164,8 @@ function curried(...args) { |
164 | 164 |
|
165 | 165 | Quand on la lance, il y a deux branches `if` : |
166 | 166 |
|
167 | | -1. Si le nombre d'`args` passé est égal ou supérieur à celui de la fonction d'origine dans sa définition (`func.length`), alors passez-lui simplement l'appel en utilisant `func.apply`. |
168 | | -2. Sinon, obtenez un partiel : nous n'appelons pas encore `func`. Au lieu de cela, un autre wrapper est retourné, qui réappliquera `curried` en fournissant les arguments précédents avec les nouveaux. |
| 167 | +1. Si le nombre d'`args` passé est égal ou supérieur à celui de la fonction d'origine dans sa définition (`func.length`), alors on lui passe simplement l'appel en utilisant `func.apply`. |
| 168 | +2. Sinon, on obtient un partiel : nous n'appelons pas encore `func`. Au lieu de cela, un autre wrapper est retourné, qui réappliquera `curried` en fournissant les arguments précédents avec les nouveaux. |
169 | 169 |
|
170 | 170 | Ensuite, si nous l'appelons, encore une fois, nous obtiendrons soit un nouveau partiel (si pas assez d'arguments) ou, finalement, le résultat. |
171 | 171 |
|
|
0 commit comments