Skip to content

Commit 5157c52

Browse files
committed
review. update dictionary
1 parent d2a4dd4 commit 5157c52

File tree

1 file changed

+12
-12
lines changed
  • 1-js/06-advanced-functions/11-currying-partials

1 file changed

+12
-12
lines changed

1-js/06-advanced-functions/11-currying-partials/article.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ alert( triple(4) ); // = mul(3, 4) = 12
6262
alert( triple(5) ); // = mul(3, 5) = 15
6363
```
6464

65-
Для чего мы обычно создаём функцию частичного применения?
65+
Для чего мы обычно создаём частично применённую функцию?
6666

6767
Польза от этого в том, что возможно создать независимую функцию с понятным названием (`double`, `triple`). Мы можем использовать её и не передавать каждый раз первый аргумент, т.к. он зафиксирован с помощью `bind`.
6868

@@ -76,7 +76,7 @@ alert( triple(5) ); // = mul(3, 5) = 15
7676

7777
Встроенный `bind` не позволяет этого. Мы не можем просто опустить контекст и перейти к аргументам.
7878

79-
К счастью, несложно создать функцию частичного применения, которая привязывает только аргументы.
79+
К счастью, несложно создать частично применённую функцию, которая привязывает только аргументы.
8080

8181
Вот так:
8282

@@ -97,7 +97,7 @@ let user = {
9797
}
9898
};
9999

100-
// добавляем частичный метод который говорит что-нибудь в настоящее время за счёт фиксирования первого аргумента
100+
// добавляем частично применённый метод, который говорит что-нибудь в настоящее время за счёт фиксирования первого аргумента
101101
user.sayNow = partial(user.say, new Date().getHours() + ':' + new Date().getMinutes());
102102

103103
user.sayNow("Hello");
@@ -107,7 +107,7 @@ user.sayNow("Hello");
107107

108108
Результатом вызова `partial(func[, arg1, arg2...])` будет обёртка `(*)`, которая вызывает `func` с:
109109
- Тем же `this`, который она получает (для вызова `user.sayNow` -- это будет `user`)
110-
- Затем передаёт ей `...argsBound` -- аргументы из "частичного" вызова (`"10:00"`)
110+
- Затем передаёт ей `...argsBound` -- аргументы из вызова `partial` (`"10:00"`)
111111
- Затем передаёт ей `...args` -- аргументы, полученные обёрткой (`"Hello"`)
112112

113113
Итак, это легко сделать с помощью оператора расширения?
@@ -151,14 +151,14 @@ alert( carriedSum(1)(2) ); // 3
151151
- Когда она вызывается как `sum(1)`, аргумент сохраняется в лексическом окружении и возвращается новая обёртка `function(b)`.
152152
- После чего `sum(1)(2)`, наконец, вызывает `function(b)`, предоставляя `2` и передаёт вызов к оригинальной мультиарной функции `sum`.
153153

154-
Более продвинутая реализация каррирования, как [_.curry](https://lodash.com/docs#curry) из библиотеки lodash, делает нечто более сложное. Она возвращает обёртку, которая позволяет выполнить функцию, если переданы все аргументы, в противном же случае -- возвращает функцию частичного применения.
154+
Более продвинутая реализация каррирования, как [_.curry](https://lodash.com/docs#curry) из библиотеки lodash, делает нечто более сложное. Она возвращает обёртку, которая позволяет выполнить функцию, если переданы все аргументы, в противном же случае -- возвращает частично применённую функцию.
155155

156156
```js
157157
function curry(f) {
158158
return function(...args) {
159159
// if args.length == f.length (количество аргументов, принимаемое f).
160160
// тогда передаёт вызов f
161-
// в противном случае возвращает функцию частичного применения, которая фиксирует первые аргументы
161+
// в противном случае возвращает частично применённую функцию, которая фиксирует первые аргументы
162162
};
163163
}
164164
```
@@ -167,7 +167,7 @@ function curry(f) {
167167

168168
Чтобы понять выгоду, нам определенно нужен пример из реальной жизни.
169169

170-
Продвинутое каррирование позволяет вызывать функцию, как обычно, так и частично.
170+
Продвинутое каррирование позволяет вызывать функцию, как обычно, так и с частичным применением.
171171

172172
Например, у нас есть функция логирования `log(date, importance, message)`, которая подготавливает и выводит информацию. В реальных проектах у таких функций есть много других полезных возможностей, например, посылать логи по сети:
173173

@@ -215,7 +215,7 @@ todayDebug("message"); // [HH:mm] DEBUG message
215215

216216
Итак:
217217
1. Мы ничего не потеряли после каррирования: `log` всё так же можно вызывать нормально.
218-
2. Мы смогли создать функции частичного применения, как сделали для логов с текущим временем.
218+
2. Мы смогли создать частично применённые функции, как сделали для логов с текущим временем.
219219

220220
## Продвинутая реализация каррирования
221221

@@ -299,10 +299,10 @@ function curried(...args) {
299299

300300
## Итого
301301

302-
- Когда мы фиксируем некоторые аргументы какой-нибудь существующей функции, результатом (менее универсальным) будет функция *частичного применения*. Чтобы получить частичное применение, мы можем использовать `bind`, но есть и другие пути.
302+
- Когда мы фиксируем некоторые аргументы какой-нибудь существующей функции, результатом (менее универсальным) будет функция *частично применённая*. Чтобы получить частичное применение, мы можем использовать `bind`, но есть и другие пути.
303303

304-
Частичное применение удобно, когда мы не хотим повторять один и тот же аргумент много раз. Например, когда у нас есть функция `send(from, to)`, и `from` всё время будет одинаков для нашей задачи, мы можем выполнить частичное применение и дальше работать с ним.
304+
Частичное применение удобно, когда мы не хотим повторять один и тот же аргумент много раз. Например, когда у нас есть функция `send(from, to)`, и `from` всё время будет одинаков для нашей задачи, мы можем создать частично применённую функцию и дальше работать с ней.
305305

306-
- *Каррирование* -- это трансформация, которая превращает вызов `f(a, b, c)` в `f(a)(b)(c)`. В JavaScript реализация обычно позволяют вызывать функцию обоими вариантами: либо нормально, либо возвращают частичное применение, если количество аргументов недостаточно.
306+
- *Каррирование* -- это трансформация, которая превращает вызов `f(a, b, c)` в `f(a)(b)(c)`. В JavaScript реализация обычно позволяет вызывать функцию обоими вариантами: либо нормально, либо возвращает частично применённую функцию, если количество аргументов недостаточно.
307307

308-
Каррирование подходит тогда, когда мы хотим легко использовать частичное применение. Как мы видели в примерах с логами: универсальная функция `log(date, importance, message)` после каррирования возвращает нам частичное применение, когда вызывается с одним аргументом, как `log(date)` или двумя аргументами, как `log(date, importance)`.
308+
Каррирование подходит тогда, когда мы хотим легко использовать частичное применение. Как мы видели в примерах с логами: универсальная функция `log(date, importance, message)` после каррирования возвращает нам частично применённую функцию, когда вызывается с одним аргументом, как `log(date)` или двумя аргументами, как `log(date, importance)`.

0 commit comments

Comments
 (0)