Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
Re: If-statement умер. Да здравствует if-expression!
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
Пока не додумаешь, используй условное выражение вместо условного оператора.
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
Стратегия. Мапить условие на функцию, которая выполняется при этом условии. Но это в том случае, когда действительно все сложно. Если грамотно декомпозировать, то ничего страшного в if нет.
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
Надо поменять парадигму программировния — надо задавать цели неким операторам, а не описывать условия.
Вот например цель — любое число из данного набора больше "А". Вот и нет ифа. Но это сейчас не возможно поменять парадигму так как всегда есть молодеж которая прется от программирования считая его искуством.
Это примерно так же как пытаться доказать что существующие ОС это ПРОСТО кошмар и прошлый век. И надо писать свою. Но где взять деньги? Кто их даст, если все считают себя самыми умными, и считают что ОСы и так самое то. А оно я про ядро, оно уже не нужно такое сложное.
Но вот ведь в чем парадокс, опять же если люди которые могут дотянуться до денег но не умеют сделать революционное решение, а другие кто может его сделать, не могут дотянуться до денег. А новую ОС как и новую парадигму программирования давно уже пора делать. Но где деньги. Я вот знаю как сделать Но деньги есть только на то что кормит.
Здравствуйте, michael_isu, Вы писали:
_>Какие варианты? или мне пора в ФП?
pattern matching? вообще есть некоторое недовольство к ифу. ну а к чему его нет? пущай живет пока, не будем его беспокоить...
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
В моем языке события не только подписываются на на другие события (группа событий, которая у меня называется комплектом), но и имеют логическое выражение которое проверяется при срабатывании комплекта. При истиности этого выражения считается что событие произошло и запускается процедура обработки событий. Получается то, что должно происходить под If-ом просто выносится из текста программы в удобное место.. Событие имеет имя.. Ну, и все значительно упрощается. Есть еще один плюс такого решения. Если надо, например, отследить индекс на конец текста и по концу чего-то выполнить, то применяя такой метод можно не беспокоится за анализ на конец файла при его разборе и избавиться от if после каждого чтения из файла.. Событие произойдет и выполниться то, что должно.
Применяя такие события спагетти код распрямляется.. Такие проблемы называл логической сложностью.. Но не нашел здесь понимания..
Re[2]: If-statement умер. Да здравствует if-expression!
JM>Но вот ведь в чем парадокс, опять же если люди которые могут дотянуться до денег но не умеют сделать революционное решение, а другие кто может его сделать, не могут дотянуться до денег. А новую ОС как и новую парадигму программирования давно уже пора делать. Но где деньги. Я вот знаю как сделать Но деньги есть только на то что кормит.
Кто мешает написать что именно предлагаешь сделать
Здравствуйте, Just Men, Вы писали:
JM>Здравствуйте, michael_isu, Вы писали:
_>>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
JM>Надо поменять парадигму программировния — надо задавать цели неким операторам, а не описывать условия.
JM>Вот например цель — любое число из данного набора больше "А". Вот и нет ифа. Но это сейчас не возможно поменять парадигму так как всегда есть молодеж которая прется от программирования считая его искуством.
Забавно. Ну убрали if поглубже. Но он же никуда не делся. На уровне машинного кода условный переход все равно остался.
Чего добиваемся?
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Забавно. Ну убрали if поглубже. Но он же никуда не делся. На уровне машинного кода условный переход все равно остался. SVZ>Чего добиваемся?
Машинные коды это еще один дуругой вопрос. Давно уже пора сделать не одно АЛУ ( пусть 6 ядер ), а 20000 просто сложателей и 20000 вычитателей ну и так далее. И сделать маш команды типа как были в DEC'е
Здравствуйте, Just Men, Вы писали:
JM>Машинные коды это еще один дуругой вопрос. Давно уже пора сделать не одно АЛУ ( пусть 6 ядер ), а 20000 просто сложателей и 20000 вычитателей ну и так далее. И сделать маш команды типа как были в DEC'е
JM>MOV @r0,@r3++
JM>И отдать упавление всем кешом ( 1 2 3 ... ) ОСу.
Гм, "все уже украдено до нас" (с)
Есть CUDA — 100500 примитивных ядер, которые можно использовать как сложаторы и вычитаторы.
Много есть задач, которые решаются на CUDA? Думаю, пальцев обеих рук хватит, чтобы сосчитать.
И пока нет нормального матаппарата для распараллеливания вычислений вряд ли их станет больше.
ИМХО.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Забавно. Ну убрали if поглубже. Но он же никуда не делся. На уровне машинного кода условный переход все равно остался. SVZ>Чего добиваемся?
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Гм, "все уже украдено до нас" (с) SVZ>Есть CUDA — 100500 примитивных ядер, которые можно использовать как сложаторы и вычитаторы. SVZ>Много есть задач, которые решаются на CUDA? Думаю, пальцев обеих рук хватит, чтобы сосчитать. SVZ>И пока нет нормального матаппарата для распараллеливания вычислений вряд ли их станет больше. SVZ>ИМХО.
Знаю CUDА не плохо. Ну что сказать — это спец процессор. На нем ничего толком не сделаешь. Да и там есть свои тараканы например надо все строго (и сложно ) выравнивать. А иначе будет еще медленней чем на CPU.
Здравствуйте, michael_isu, Вы писали:
_>А можно пример?
Пример 1.2. Определение события EndText.
Dim Integer Len ' Длина текста
Dim Integer Ind] ' Индекс проверяемого символа
New Event EndText ' Создание события EndText
{ Condition= (Len=Ind)
Connection (Ind.Change,Len.Change) ' Подписка на события Ind.Change и Len.Change
}
При изменении длины или индекса возникают события Ind.Change или Len.Change. Запускается проверка события EndText подписанного на них. Если выражение (Len=Ind) истинно, то тогда возникает событие EndText. В каком месте напишешь процедуру обработки этого события не важно. Факт в том, что больше отслеживать его в самой программе не надо.
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
Элементарно
Вместо спегетти-кода
if (expression)
{
...
}
else
{
...
}
Пишем нормальный удобочитаемый код, используя паттерн-матчинг:
switch(expression)
{
case true:
...
break;
case false:
...
break;
}
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
И правда! Давно пора вернуться к старым добрым cmp, je, jb, .....
А ещё лучше перфокартам — уж там то никакого спагетти.