Функция сложения с поддержкой каррирования

Для двух слагаемых поддержите оба вызова: add(a, b) и add(a)(b). Отличайте число переданных аргументов от их truthy-значений.

Короткий ответ

Что ответить на собеседовании

Для двух слагаемых поддержите оба вызова: add(a, b) и add(a)(b). Отличайте число переданных аргументов от их truthy-значений.

Подробный разбор

Ответ с пояснениями

Условие

Разработайте функцию сложения, способную принимать аргументы как обычным способом, так и через механизм каррирования.

Ответ

Для двух слагаемых поддержите оба вызова: add(a, b) и add(a)(b). Отличайте число переданных аргументов от их truthy-значений.

function add(a, b) {
  if (arguments.length === 1) return value => a + value;
  return a + b;
}
// add(2, 3) === add(2)(3) === 5

Контракт рассчитан на два числовых слагаемых, включая ноль. Бесконечная цепочка add(1)(2)(3) требует отдельного правила завершения и не следует автоматически из условия.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее