Оператор if должен умереть.
От: michael_isu Беларусь  
Дата: 28.05.12 12:14
Оценка: :))) :)
Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
Re: If-statement умер. Да здравствует if-expression!
От: Qbit86 Россия
Дата: 28.05.12 12:22
Оценка: :)))
Здравствуйте, michael_isu, Вы писали:

_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?


Пока не додумаешь, используй условное выражение вместо условного оператора.
Глаза у меня добрые, но рубашка — смирительная!
Re: Оператор if должен умереть.
От: elmal  
Дата: 28.05.12 12:24
Оценка:
Здравствуйте, michael_isu, Вы писали:

_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?

Стратегия. Мапить условие на функцию, которая выполняется при этом условии. Но это в том случае, когда действительно все сложно. Если грамотно декомпозировать, то ничего страшного в if нет.
Re: Оператор if должен умереть.
От: Just Men  
Дата: 28.05.12 12:28
Оценка: :))
Здравствуйте, michael_isu, Вы писали:

_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?


Надо поменять парадигму программировния — надо задавать цели неким операторам, а не описывать условия.

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

Это примерно так же как пытаться доказать что существующие ОС это ПРОСТО кошмар и прошлый век. И надо писать свою. Но где взять деньги? Кто их даст, если все считают себя самыми умными, и считают что ОСы и так самое то. А оно я про ядро, оно уже не нужно такое сложное.

Но вот ведь в чем парадокс, опять же если люди которые могут дотянуться до денег но не умеют сделать революционное решение, а другие кто может его сделать, не могут дотянуться до денег. А новую ОС как и новую парадигму программирования давно уже пора делать. Но где деньги. Я вот знаю как сделать Но деньги есть только на то что кормит.
Просто человек.
Re: Оператор if должен умереть.
От: BrainSlug Израиль  
Дата: 28.05.12 12:30
Оценка:
Здравствуйте, michael_isu, Вы писали:

_>Какие варианты? или мне пора в ФП?

pattern matching? вообще есть некоторое недовольство к ифу. ну а к чему его нет? пущай живет пока, не будем его беспокоить...
.
Re: Оператор if должен умереть.
От: 0x7be СССР  
Дата: 28.05.12 12:38
Оценка: +1
Здравствуйте, michael_isu, Вы писали:

_>Какие варианты? или мне пора в ФП?

Pattern-matching/unifcation.
Re: Оператор if должен умереть.
От: batu Украина  
Дата: 28.05.12 12:39
Оценка:
Здравствуйте, michael_isu, Вы писали:

_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?

В моем языке события не только подписываются на на другие события (группа событий, которая у меня называется комплектом), но и имеют логическое выражение которое проверяется при срабатывании комплекта. При истиности этого выражения считается что событие произошло и запускается процедура обработки событий. Получается то, что должно происходить под If-ом просто выносится из текста программы в удобное место.. Событие имеет имя.. Ну, и все значительно упрощается. Есть еще один плюс такого решения. Если надо, например, отследить индекс на конец текста и по концу чего-то выполнить, то применяя такой метод можно не беспокоится за анализ на конец файла при его разборе и избавиться от if после каждого чтения из файла.. Событие произойдет и выполниться то, что должно.
Применяя такие события спагетти код распрямляется.. Такие проблемы называл логической сложностью.. Но не нашел здесь понимания..
Re[2]: If-statement умер. Да здравствует if-expression!
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 28.05.12 12:40
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Пока не додумаешь, используй условное выражение вместо условного оператора.


Умри, неверная, я чай испил оттуда!
В Erlang условное выражение и оператор if — одно и то же.
Re[3]: If-statement умер. Да здравствует if-expression!
От: Qbit86 Россия
Дата: 28.05.12 12:43
Оценка: +3
Здравствуйте, netch80, Вы писали:

N>В Erlang условное выражение и оператор if — одно и то же.


Ну какбе во всех порядочных языках if — это не то что в Си-подобных языках «if», а то, что в Си-подобных языках «тернарный оператор».
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Оператор if должен умереть.
От: batu Украина  
Дата: 28.05.12 12:45
Оценка:
Здравствуйте, Just Men, Вы писали:



JM>Но вот ведь в чем парадокс, опять же если люди которые могут дотянуться до денег но не умеют сделать революционное решение, а другие кто может его сделать, не могут дотянуться до денег. А новую ОС как и новую парадигму программирования давно уже пора делать. Но где деньги. Я вот знаю как сделать Но деньги есть только на то что кормит.

Кто мешает написать что именно предлагаешь сделать
Re[2]: Оператор if должен умереть.
От: Stanislav V. Zudin Россия  
Дата: 28.05.12 12:46
Оценка:
Здравствуйте, Just Men, Вы писали:

JM>Здравствуйте, michael_isu, Вы писали:


_>>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?


JM>Надо поменять парадигму программировния — надо задавать цели неким операторам, а не описывать условия.


JM>Вот например цель — любое число из данного набора больше "А". Вот и нет ифа. Но это сейчас не возможно поменять парадигму так как всегда есть молодеж которая прется от программирования считая его искуством.


Забавно. Ну убрали if поглубже. Но он же никуда не делся. На уровне машинного кода условный переход все равно остался.
Чего добиваемся?
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Оператор if должен умереть.
От: Just Men  
Дата: 28.05.12 12:50
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Забавно. Ну убрали if поглубже. Но он же никуда не делся. На уровне машинного кода условный переход все равно остался.

SVZ>Чего добиваемся?

Машинные коды это еще один дуругой вопрос. Давно уже пора сделать не одно АЛУ ( пусть 6 ядер ), а 20000 просто сложателей и 20000 вычитателей ну и так далее. И сделать маш команды типа как были в DEC'е

MOV @r0,@r3++

И отдать упавление всем кешом ( 1 2 3 ... ) ОСу.
Просто человек.
Re[4]: Оператор if должен умереть.
От: Stanislav V. Zudin Россия  
Дата: 28.05.12 13:01
Оценка:
Здравствуйте, Just Men, Вы писали:

JM>Машинные коды это еще один дуругой вопрос. Давно уже пора сделать не одно АЛУ ( пусть 6 ядер ), а 20000 просто сложателей и 20000 вычитателей ну и так далее. И сделать маш команды типа как были в DEC'е


JM>MOV @r0,@r3++


JM>И отдать упавление всем кешом ( 1 2 3 ... ) ОСу.


Гм, "все уже украдено до нас" (с)
Есть CUDA — 100500 примитивных ядер, которые можно использовать как сложаторы и вычитаторы.
Много есть задач, которые решаются на CUDA? Думаю, пальцев обеих рук хватит, чтобы сосчитать.
И пока нет нормального матаппарата для распараллеливания вычислений вряд ли их станет больше.
ИМХО.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Оператор if должен умереть.
От: michael_isu Беларусь  
Дата: 28.05.12 13:02
Оценка:
А можно пример?
Re[3]: Оператор if должен умереть.
От: michael_isu Беларусь  
Дата: 28.05.12 13:04
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Забавно. Ну убрали if поглубже. Но он же никуда не делся. На уровне машинного кода условный переход все равно остался.

SVZ>Чего добиваемся?

Что там на машинном уровне — мне не интересно.
Re[5]: Оператор if должен умереть.
От: Just Men  
Дата: 28.05.12 13:06
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Гм, "все уже украдено до нас" (с)

SVZ>Есть CUDA — 100500 примитивных ядер, которые можно использовать как сложаторы и вычитаторы.
SVZ>Много есть задач, которые решаются на CUDA? Думаю, пальцев обеих рук хватит, чтобы сосчитать.
SVZ>И пока нет нормального матаппарата для распараллеливания вычислений вряд ли их станет больше.
SVZ>ИМХО.

Знаю CUDА не плохо. Ну что сказать — это спец процессор. На нем ничего толком не сделаешь. Да и там есть свои тараканы например надо все строго (и сложно ) выравнивать. А иначе будет еще медленней чем на CPU.
Просто человек.
Re[3]: Оператор if должен умереть.
От: batu Украина  
Дата: 28.05.12 13:42
Оценка:
Здравствуйте, 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. В каком месте напишешь процедуру обработки этого события не важно. Факт в том, что больше отслеживать его в самой программе не надо.
Re: Оператор if должен умереть.
От: mrTwister Россия  
Дата: 28.05.12 17:00
Оценка: +2 :))) :))) :))) :))) :)))
Здравствуйте, michael_isu, Вы писали:

_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?


Элементарно

Вместо спегетти-кода
if (expression)
{
   ...
}
else
{
   ...
}


Пишем нормальный удобочитаемый код, используя паттерн-матчинг:

switch(expression)
{
    case true:
        ...
        break;

    case false:
        ...
        break;
}
лэт ми спик фром май харт
Re[2]: Оператор if должен умереть.
От: os24ever Россия http://www.r-5.org/favicon.png
Дата: 28.05.12 17:22
Оценка:
T>Пишем нормальный удобочитаемый код, используя паттерн-матчинг:

Маловато будет:

switch(expression)
{
    case true: new function () {
        ...
        } break;

    case false: new function () {
        ...
        } break;
}
Re: Оператор if должен умереть.
От: 11molniev  
Дата: 28.05.12 17:37
Оценка: 1 (1) +1
Здравствуйте, michael_isu, Вы писали:

_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?


И правда! Давно пора вернуться к старым добрым cmp, je, jb, .....
А ещё лучше перфокартам — уж там то никакого спагетти.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.