Для двух слагаемых поддержите оба вызова: 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) требует отдельного правила завершения и не следует автоматически из условия.