Выносить в методы наверное, чтобы на верхнем уровне не было кучи отвлекающих деталей
такое есть, и кажется недостаточным. смотрю щас на xstate чтобы можно было визуализировать и, но пока не понимаю насколько оно под это подходит
также если условия длинные то круто выносить их в отдельные человекопонятные предикаты
если можно как-то распределить проверки по группам и декомпозировать - тоже круто
ну с учетом того, что на диаграмме прямо так и написано if (a < b), то в коде я решил так и оставить. пока что сделал все функции чистыми (до этого все бралось из внешнего скоупа), и вынес все условия из функций на ружу чтобы стало легче читать и не приходилось проваливаться чтобы понять что происходит. Стало лучше
звучит уже хорошо
Воспользуйся техниками функционального программирования. Каждый блок сделай функцией. чистой функцией ход выполнения программы - последовательность функций, каждая следующая получает аргументом результат выполнения предыдущей - чтото типа такого получится. читабельность отличная! pipe(fnBlock1, fnSelectBlock2, fnBlock2, fnSelectBlock3) а если и методы одинаковые будут у блоков, то ваще красота
не уверен что именно это хорошо ляжет. у меня далеко не всегда следующей функции нужен результат предыдущей. Ну и тут я не понимаю как работать с условиями
const pipe = (x0, ...fns) => fns.reduce((y, f) => f(y), x0); const fn1 = (x) => 5 + x const fnDiv = (x) => { console.log('div', x) return 0 } const fnMulti = pipe(1, fn1, fn1, fn1) const fn2 = (x) => x > 10 ? fnDiv(x / 2) : fnMulti const endFn = (x) => console.log('end, res = ', x); const res = pipe(1, fn1, fn2, endFn) не нужен - не передавай
а лучше вот так выбирать const pipe = (x0, ...fns) => fns.reduce((y, f) => f(y), x0); const fn1 = (x) => 5 + x const fn21 = () => console.log(' > 10') const fn22 = () => console.log(' < 10') const endFn = (x) => console.log('end, res = ', x); const conditionFn = (x) => x > 10 const selectFn2 = (conditionFn) => (f1, f2) => (x) => conditionFn(x) ? f1 : f2 const mySelectFn2 = selectFn2(conditionFn) const res = pipe(1, fn1, mySelectFn2(fn21, fn22), endFn)
Обсуждают сегодня