Есть цепочка функций:
functionA(
functionB(
functionC(
functionD(
functionE(myVariable)
)
)
)
);
При достижении какого-то условия может понадобиться отказаться, например, от функции functionC
в этой цепочке. Для понимания, вот один из вариантов решения:
let trueOrFalse = Math.random() >= 0.5;
if (trueOrFalse) { //если true, то выполняем цепочку с functionC
functionA(functionB(functionC(functionD(functionE(myVariable)))));
}
else { //если false, то выполняем цепочку без functionC
functionA(functionB(functionD(functionE(myVariable))));
}
Вот еще вариант. Тут мы не создаем полностью изолированные цепочки, а возвращаем нужную с нужного места:
let trueOrFalse = Math.random() >= 0.5;
functionA(
functionB(
trueOrFalse ?
functionC( //если true, то выполняем цепочку с functionC
functionD(
functionE(myVariable)
)
)
:
functionD( //если false, то выполняем цепочку без functionC
functionE(myVariable)
)
)
);
Сразу понятен минус всех этих примеров - излишнее дублирование кода. А что, если в цепочке будет гораздо больше функций? Каким образом можно сделать то же, что и в примерах выше, но без дублирования кода? Возможно решение где-то на поверхности, но у меня не получилось его разглядеть.
П.С. не хотел делить вопрос на два разных ввиду схожести, поэтому вот бонус: как без дублирования кода избавиться от метода methodC
в цепочке при trueOrFalse === false
, но выполнить метод при trueOrFalse === true
?
let trueOrFalse = Math.random() >= 0.5;
myVariable.methodA().methodB().methodC().methodD().methodE();
function execChain(funcs, param) {
var res = param;
for(var i = 0; i < funcs.length; i++) {
if (funcs[i])
res = funcs[i](res);
}
return res;
}
execChain([
functionE,
functionD,
trueOrFalse? functionC : null,
functionB,
functionA], 123
);
Для другого вида цепочки - аналогично, только вызывать функции:
res = funcs[i].call(res);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
как в методе myItem (showmyItem) отображать ИЗМЕНЕННЫЙ параметр this
Способ может показаться костыльным, вместо описанного используют радио-кнопки, но так требует ситуацияКак сделать, чтобы снимался чекбокс,...
Задача сэмулировать клик по кнопке «Проверено» на хитром UXbutton “Проверено» имеет свойство срабатывать при клике правой кнопкой мыши, как...
Только начал открывать для себя SVG изучая немногочисленные туториалыРазобрался, что существует три способа анимации: SMIL, CSS, JS