You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Для чего мы обычно создаём функцию частичного применения?
65
+
Для чего мы обычно создаём частично применённую функцию?
66
66
67
67
Польза от этого в том, что возможно создать независимую функцию с понятным названием (`double`, `triple`). Мы можем использовать её и не передавать каждый раз первый аргумент, т.к. он зафиксирован с помощью `bind`.
- Когда она вызывается как `sum(1)`, аргумент сохраняется в лексическом окружении и возвращается новая обёртка `function(b)`.
152
152
- После чего `sum(1)(2)`, наконец, вызывает `function(b)`, предоставляя `2` и передаёт вызов к оригинальной мультиарной функции `sum`.
153
153
154
-
Более продвинутая реализация каррирования, как [_.curry](https://lodash.com/docs#curry) из библиотеки lodash, делает нечто более сложное. Она возвращает обёртку, которая позволяет выполнить функцию, если переданы все аргументы, в противном же случае -- возвращает функцию частичного применения.
154
+
Более продвинутая реализация каррирования, как [_.curry](https://lodash.com/docs#curry) из библиотеки lodash, делает нечто более сложное. Она возвращает обёртку, которая позволяет выполнить функцию, если переданы все аргументы, в противном же случае -- возвращает частично применённую функцию.
155
155
156
156
```js
157
157
functioncurry(f) {
158
158
returnfunction(...args) {
159
159
// if args.length == f.length (количество аргументов, принимаемое f).
160
160
// тогда передаёт вызов f
161
-
// в противном случае возвращает функцию частичного применения, которая фиксирует первые аргументы
161
+
// в противном случае возвращает частично применённую функцию, которая фиксирует первые аргументы
162
162
};
163
163
}
164
164
```
@@ -167,7 +167,7 @@ function curry(f) {
167
167
168
168
Чтобы понять выгоду, нам определенно нужен пример из реальной жизни.
169
169
170
-
Продвинутое каррирование позволяет вызывать функцию, как обычно, так и частично.
170
+
Продвинутое каррирование позволяет вызывать функцию, как обычно, так и с частичным применением.
171
171
172
172
Например, у нас есть функция логирования `log(date, importance, message)`, которая подготавливает и выводит информацию. В реальных проектах у таких функций есть много других полезных возможностей, например, посылать логи по сети:
1. Мы ничего не потеряли после каррирования: `log` всё так же можно вызывать нормально.
218
-
2. Мы смогли создать функции частичного применения, как сделали для логов с текущим временем.
218
+
2. Мы смогли создать частично применённые функции, как сделали для логов с текущим временем.
219
219
220
220
## Продвинутая реализация каррирования
221
221
@@ -299,10 +299,10 @@ function curried(...args) {
299
299
300
300
## Итого
301
301
302
-
- Когда мы фиксируем некоторые аргументы какой-нибудь существующей функции, результатом (менее универсальным) будет функция *частичного применения*. Чтобы получить частичное применение, мы можем использовать `bind`, но есть и другие пути.
302
+
- Когда мы фиксируем некоторые аргументы какой-нибудь существующей функции, результатом (менее универсальным) будет функция *частично применённая*. Чтобы получить частичное применение, мы можем использовать `bind`, но есть и другие пути.
303
303
304
-
Частичное применение удобно, когда мы не хотим повторять один и тот же аргумент много раз. Например, когда у нас есть функция `send(from, to)`, и `from` всё время будет одинаков для нашей задачи, мы можем выполнить частичное применение и дальше работать с ним.
304
+
Частичное применение удобно, когда мы не хотим повторять один и тот же аргумент много раз. Например, когда у нас есть функция `send(from, to)`, и `from` всё время будет одинаков для нашей задачи, мы можем создать частично применённую функцию и дальше работать с ней.
305
305
306
-
-*Каррирование* -- это трансформация, которая превращает вызов `f(a, b, c)` в `f(a)(b)(c)`. В JavaScript реализация обычно позволяют вызывать функцию обоими вариантами: либо нормально, либо возвращают частичное применение, если количество аргументов недостаточно.
306
+
-*Каррирование* -- это трансформация, которая превращает вызов `f(a, b, c)` в `f(a)(b)(c)`. В JavaScript реализация обычно позволяет вызывать функцию обоими вариантами: либо нормально, либо возвращает частично применённую функцию, если количество аргументов недостаточно.
307
307
308
-
Каррирование подходит тогда, когда мы хотим легко использовать частичное применение. Как мы видели в примерах с логами: универсальная функция `log(date, importance, message)` после каррирования возвращает нам частичное применение, когда вызывается с одним аргументом, как `log(date)` или двумя аргументами, как `log(date, importance)`.
308
+
Каррирование подходит тогда, когда мы хотим легко использовать частичное применение. Как мы видели в примерах с логами: универсальная функция `log(date, importance, message)` после каррирования возвращает нам частично применённую функцию, когда вызывается с одним аргументом, как `log(date)` или двумя аргументами, как `log(date, importance)`.
0 commit comments