169 похожих чатов

Ребят, какие есть техники в программировании для упрощения читабельности длинного

if/else кода? Вот к примеру есть формула где от результатов одних расчетов идем в различные ветки и ветки достаточно длинные и сложные. Ориентироваться в этом реально сложно сейчас

11 ответов

5 просмотров

Выносить в методы наверное, чтобы на верхнем уровне не было кучи отвлекающих деталей

Kirill-Kulikov Автор вопроса
Andrei Kurosh
Выносить в методы наверное, чтобы на верхнем уровн...

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

также если условия длинные то круто выносить их в отдельные человекопонятные предикаты

если можно как-то распределить проверки по группам и декомпозировать - тоже круто

Kirill-Kulikov Автор вопроса
Vyacheslav Гайсин
также если условия длинные то круто выносить их в ...

ну с учетом того, что на диаграмме прямо так и написано if (a < b), то в коде я решил так и оставить. пока что сделал все функции чистыми (до этого все бралось из внешнего скоупа), и вынес все условия из функций на ружу чтобы стало легче читать и не приходилось проваливаться чтобы понять что происходит. Стало лучше

Воспользуйся техниками функционального программирования. Каждый блок сделай функцией. чистой функцией ход выполнения программы - последовательность функций, каждая следующая получает аргументом результат выполнения предыдущей - чтото типа такого получится. читабельность отличная! pipe(fnBlock1, fnSelectBlock2, fnBlock2, fnSelectBlock3) а если и методы одинаковые будут у блоков, то ваще красота

Kirill-Kulikov Автор вопроса
Alexey Turdakin
Воспользуйся техниками функционального программиро...

не уверен что именно это хорошо ляжет. у меня далеко не всегда следующей функции нужен результат предыдущей. Ну и тут я не понимаю как работать с условиями

Kirill Kulikov
не уверен что именно это хорошо ляжет. у меня дале...

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) не нужен - не передавай

Kirill-Kulikov Автор вопроса
Kirill Kulikov
изучу, спасибо

а лучше вот так выбирать 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)

Похожие вопросы

Обсуждают сегодня

Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
38
Проблема с Windows scripting control Множество объектов получают iDispatch обертки и отдаются в скрипты. При этом скрипты могут эти обертки держать живыми очень долго, наприм...
Arioch The
16
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
9
Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
комрады, че-та лыжы не едут var tmpFont: TFont; begin tmpFont:= TFont.Create; try case rgFontColor.ItemIndex of 0: tmpFont.Color:= clWindowText; 1: tmpFo...
Ed Doc
34
Вот еще криповенькая штука. uMain.pas(517,3) Warning: Case statement does not handle all possible cases И ЧО? 😂
Александр (Rouse_) Багель
20
Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
коллеги, а есть простой способ определить, что программу из под Delphi запускают?
Михаил
10
40 тысяч в час / 3600 = 11,11 в секунду... Вам точно нужна очередь? (я просто не знаю "контекста") Такое количество запросов любое приложение замечательно "прожует" и не попер...
Igor Mitin
5
М-да. Почему бы просто со stringlist не работать?
Michael Longneck
23
Карта сайта