Skip to content

Commit d2a4dd4

Browse files
committed
iliakan review
1 parent ffcfe6c commit d2a4dd4

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

  • 1-js/06-advanced-functions/11-currying-partials

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,21 @@ 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

69-
В других случаях частичное применение полезно, когда у нас есть очень общая функция и для удобства мы хотим создать её частный случай.
69+
В других случаях частичное применение полезно, когда у нас есть очень общая функция и для удобства мы хотим создать её частный вариант.
7070

71-
Например, у нас есть функция `send(from, to, text)`. Потом внутри объекта `user` мы можем захотеть использовать её частный случай: `sendTo(to, text)`, который отправляет текст от имени текущего пользователя.
71+
Например, у нас есть функция `send(from, to, text)`. Потом внутри объекта `user` мы можем захотеть использовать её частный вариант: `sendTo(to, text)`, который отправляет текст от имени текущего пользователя.
7272

7373
## Частичное применение без контекста
7474

7575
Что если мы хотим зафиксировать некоторые аргументы, но не привязывать `this`?
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");
@@ -122,7 +122,7 @@ user.sayNow("Hello");
122122

123123
Каррирование не вызывает функцию. Оно просто трансформирует её.
124124

125-
Давайте создадим вспомогательную функцию `curry(f)`, которая выполняет каррирование функции `f` с двумя аргументами. Другими словами, `curry(f)` для функции с двумя аргументами `f(a, b)` трансформирует её в `f(a)(b)`.
125+
Давайте создадим вспомогательную функцию `curry(f)`, которая выполняет каррирование бинарной функции `f`. Другими словами, `curry(f)` для бинарной функции f(a, b)` трансформирует её в `f(a)(b)`.
126126

127127
```js run
128128
*!*
@@ -149,8 +149,7 @@ alert( carriedSum(1)(2) ); // 3
149149

150150
- Результат `curry(func)` -- обёртка `function(a)`.
151151
- Когда она вызывается как `sum(1)`, аргумент сохраняется в лексическом окружении и возвращается новая обёртка `function(b)`.
152-
- When it is called like `sum(1)`, the argument is saved in the Lexical Environment, and a new wrapper is returned `function(b)`.
153-
- После чего `sum(1)(2)`, наконец, вызывает `function(b)`, предоставляя `2` и передаёт вызов к оригинальной функции `sum`, принимающей несколько аргументов.
152+
- После чего `sum(1)(2)`, наконец, вызывает `function(b)`, предоставляя `2` и передаёт вызов к оригинальной мультиарной функции `sum`.
154153

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

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

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

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

0 commit comments

Comments
 (0)