Это
Это поведение может быть очень полезным, чтобы избавиться от условий в приложении. Благодаря классу SourceRace каждый источник данных может сам решить должен ли он вообще отдавать какую-либо информацию или можно промолчать.
Для примера сделаем программу, которая будет умножать на 2 четные числа и на 3 нечетные
Пример 1.
import {
SourceMap,
SourceRace,
Source,
SourceWithPool,
give,
value,
GuestCast,
Private,
} from "patron-oop";
const isEven = (v) => v % 2 === 0;
const isOdd = (v) => v % 2 !== 0;
const nTimesSource = (condition, n, baseSource) => (guest) => {
value(
baseSource,
new GuestCast(guest, (value) => {
if (condition(value)) {
give(value * n, guest);
}
})
);
};
const source = new SourceWithPool([1, 2, 3, 4, 5]);
const guestMapped = new SourceMap(
source,
new Private(
(itemSource) =>
new SourceRace([
nTimesSource(isEven, 2, itemSource),
nTimesSource(isOdd, 3, itemSource),
])
)
);
guestMapped.value((v) => {
document.querySelector(".guest-result").textContent = v.join();
});
Результат 1.
В программе использованы классы и функции:
Можно сказать, что код примера слишком сложный для такой простой задачи. Да это правда, но пример показывает, что можно построить код таким образом, чтобы классы или функции сами в зависимости от значения решали должны ли они выполнять свою работу или нет
Эта возможность - принимать решение давать свой ответ или нет внутри объектов - может быть очень ценной для инкапсуляции логики и переиспользования