Skip to content

Commit 693af4c

Browse files
committed
L10n fr for partial-application exercises
1 parent 89c4fe7 commit 693af4c

File tree

2 files changed

+152
-0
lines changed

2 files changed

+152
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
RESUME/FIXME
2+
3+
# Défi
4+
5+
**Utilisez `Function#bind()`** pour implémenter une fonction de log qui vous permet de préfixer vos messages.
6+
7+
Votre implémentation doit accepter une `String` de préfixe, et renvoyer une fonction qui affichera les contenus qu’on lui passe sur la console, préfixée par cette `String`.
8+
9+
Assurez-vous que **tous** les arguments passés à la fonction de log (celle renvoyée par la fonction que vous allez écrire) sont bien affichés.
10+
11+
**Affichez le résultat directement sur la console.**
12+
13+
## Arguments
14+
15+
* `namespace` : une `String` qui préfixe les messages passés à la fonction qui sera retournée.
16+
17+
## Exemple
18+
19+
```js
20+
var info = logger('INFO :')
21+
info('ceci est un message d’information')
22+
// INFO : ceci est un message d’information
23+
24+
var warn = logger('WARN :')
25+
warn('ceci est un avertissement', 'avec du rab')
26+
// WARN : ceci est un avertissement avec du rab
27+
```
28+
29+
## Conditions
30+
31+
* Utilisez `Function#bind()`
32+
33+
## Base de travail
34+
35+
```js
36+
module.exports = function logger(namespace) {
37+
// VOTRE SOLUTION ICI
38+
}
39+
```
40+
41+
## Resources
42+
43+
* https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/bind
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
L’application partielle vous permet de créer de nouvelles fonctions à partir de fonctions existantes, en pré-remplissant tout ou partie de leurs arguments. Une fois les arguments pré-remplis définis, vous obtenez une nouvelle fonction qui n’attend plus que les éventuels arguments restants pour exécuter la fonction d’origine.
2+
3+
Plus formellement : l’application partielle désigne le pré-remplissage d’arguments d’une fonction pour produire une fonction de moindre arité.
4+
5+
À titre d’exemple, imaginons que nous avons une fonction `add()` qui accepte deux arguments et renvoie leur somme :
6+
7+
```js
8+
function add(x, y) {
9+
return x + y
10+
}
11+
12+
add(10, 20) // => 30
13+
```
14+
15+
À présent, imaginons que nous disposons d’une fonction `partiallyApply()`. Celle-ci reçoit une fonction et quelques arguments qu’elle « applique partiellement » (qu’elle pré-remplit, en somme).
16+
17+
Dans le code qui suit, nous pré-remplissons le premier argument de notre fonction `add()`, à savoir `x` :
18+
19+
```js
20+
var addTen = partiallyApply(add, 10) // pré-remplit `x` à 10
21+
```
22+
23+
`addTen()` est une nouvelle fonction, qui n’a plus besoin que du paramètre `y` de `add()`. `add()` n’a pas encore été appelée !
24+
25+
Une fois que nous passons l’argument pour `y`, la fonction `add()` originale peut être appelée :
26+
27+
```js
28+
addTen(20) // => 30
29+
addTen(100) // => 110
30+
addTen(0) // => 10
31+
// etc.
32+
```
33+
34+
Tous les exemples ci-dessus reviennent à appeler `add(10, y)`, ou `y` serait fourni dans l’appel à la bien-nommée `addTen()`.
35+
36+
# Défi
37+
38+
Utilisez l’application partielle pour créer une fonction qui pré-remplit un premier argument pour `console.log()`. En somme, implémentez une fonction de log qui préfixe son message.
39+
40+
Votre implémentation doit accepter une `String` de préfixe, et renvoyer une fonction qui affichera les contenus qu’on lui passe sur la console, préfixée par cette `String`.
41+
42+
Vous aurez besoin de `Function#apply()` pour implémenter l’application partielle.
43+
44+
Assurez-vous que **tous** les arguments passés à la fonction de log (celle renvoyée par la fonction que vous allez écrire) sont bien affichés.
45+
46+
**Affichez le résultat directement sur la console.**
47+
48+
## Arguments
49+
50+
* `namespace` : une `String` qui préfixe les messages passés à la fonction qui sera retournée.
51+
52+
## Exemple
53+
54+
```js
55+
var info = logger('INFO :')
56+
info('ceci est un message d’information')
57+
// INFO : ceci est un message d’information
58+
59+
var warn = logger('WARN :')
60+
warn('ceci est un avertissement', 'avec du rab')
61+
// WARN : ceci est un avertissement avec du rab
62+
```
63+
64+
## Conditions
65+
66+
* N’utilisez pas `Function#bind()`
67+
* Utilisez `Function#apply()`
68+
69+
## Base de travail
70+
71+
```js
72+
var slice = Array.prototype.slice
73+
74+
function logger(namespace) {
75+
// VOTRE SOLUTION ICI
76+
}
77+
78+
module.exports = logger
79+
```
80+
81+
## Ressources
82+
83+
* https://en.wikipedia.org/wiki/Partial_application
84+
* https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/apply
85+
86+
## Conseils
87+
88+
Gardez à l’esprit que `console.log()` accepte un nombre quelconque d’arguments et les affiche, séparés par des espaces :
89+
90+
```js
91+
console.log('bonjour', 'monde') // => 'bonjour monde'
92+
console.log(1, 2, 3) // => 1 2 3
93+
```
94+
95+
Nous voulons simplement pré-remplir le premier argument de `console.log()`.
96+
97+
`Function#apply()` nous permet d’exécuter une fonction, en fournissant une valeur spécifique pour `this` (ce qu’on peut royalement ignorer sur ce coup), puis un **tableau d’arguments à passer à la fonction** :
98+
99+
```js
100+
add(10, 20) // => 30
101+
add.apply(null, [10, 20]) // => 30
102+
```
103+
104+
Faites bien la différence entre `apply()` et `call()` :
105+
106+
```js
107+
add.apply(null, [10, 20]) // => 30
108+
add.call(null, 10, 20) // => 30
109+
```

0 commit comments

Comments
 (0)