Ответ вслух Middle Функции высшего порядка обновлено

Каррирование и частичное применение

Вопрос

Что такое каррирование и чем оно отличается от частичного применения?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Каррирование превращает f(a, b, c) в f(a)(b)(c) - цепочку функций по одному аргументу. Частичное применение фиксирует часть аргументов и возвращает функцию, ждущую остальные: f.bind(null, a) - уже частичное применение.

Что должно прозвучать в ответе

  • каррирование превращает функцию n аргументов в цепочку функций одного

  • частичное применение фиксирует часть аргументов и возвращает функцию остальных

  • и то и другое строится на замыкании

  • практика: конфигурируемые обработчики, логгеры, селекторы

  • bind - встроенное частичное применение

Что могут спросить следом

  • Напиши curry, который работает и как f(a)(b), и как f(a, b)
  • Чем это отличается от композиции функций
  • Где каррирование вредит читаемости

Разбор

Каррирование превращает f(a, b, c) в f(a)(b)(c) - цепочку функций по одному аргументу. Частичное применение фиксирует часть аргументов и возвращает функцию, ждущую остальные: f.bind(null, a) - уже частичное применение.

Оба приёма работают на замыкании. На практике они дают заготовки: log('warn') возвращает логгер уровня warn, getBy('id') - селектор по полю. В интерфейсах это способ не плодить стрелки в JSX на каждый рендер.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.