Частичное приложение — это метод функционального программирования. По сути, он фиксирует значение некоторых аргументов функции. Я знаю, что это звучит немного запутанно, так что давайте сделаем это более ощутимо. Наиболее распространенная функция частичного приложения, которую я использовал в JavaScript, — это .bind(). Когда вы используете .bind(), вы фиксируете значение this для функции, которое применяется всякий раз, когда функция вызывается позже.

Здесь у меня есть класс кошки с некоторыми переменными экземпляра и одним методом. Я использую .bind() в своем методе .describeCat(), поэтому, когда я использую this внутри метода, он знает, что я имею в виду this экземпляра. Обязательный налог на кошек:

Итак, как это выглядит, если вы хотите создать свой собственный партиал? Допустим, мы хотим перечислить некоторые предпочтения Момо. Функция может выглядеть так:

Функция предпочтений принимает строку для описания отношения Момо к следующим элементам, а затем произвольное количество элементов в качестве дополнительных аргументов. Функция возвращает строку, в которой отмечается настроение Момо и перечисляются элементы.

Однако Момо — довольно крутая кошка, и мы могли бы бесконечно использовать эту функцию, чтобы делиться всеми ее чувствами. Вот где партиалы могут немного облегчить нашу жизнь — мы можем создать дополнительные функции, такие как .likes(), .dislikes() или .knocksOffTheTableJustForTheFunOfDrivingHumansCrazy(), которые будут использовать наш оригинальный метод .preferences(), установив определенное значение для настроение.

Функция .partial() принимает два аргумента: функцию и то, что мы хотим установить в качестве первого аргумента. В нашем случае первым аргументом является настроение. Затем он возвращает новую функцию только с одним параметром, остальные аргументы будут переданы в функцию fn вместе с первым аргументом. Итак, чтобы создать нашу функцию .likes(), все, что нам нужно сделать, это:

Мы можем повторить это для dislikes() и .knocksOffTheTableJustForTheFunOfDrivingHumansCrazy(), чтобы получить:

И тогда мы можем вызвать их так:

Все вместе сейчас:

В качестве последнего кошачьего налога единственная и неповторимая красавица Момо: