Re: Оператор if должен умереть.
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 28.05.12 18:12
Оценка:
Здравствуйте, michael_isu, Вы писали:

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


Как не прогер-задрот официально заявляю, чо if — это один из лучших операторов (после присвоения, конечно ). Потому что это самый понятный и простой оператор. Даже в этом долбанном for постоянно забываешь в какой последовательности чо там идёт: сначала условие или приращение.
Вселенная бесконечна как вширь, так и вглубь.
Re[2]: Оператор if должен умереть.
От: mrTwister Россия  
Дата: 28.05.12 18:36
Оценка: :)
Здравствуйте, mrTwister, Вы писали:


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


Ах, да, совсем забыл. Правильный вариант такой:

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

    case false:
        ...
        break;

    default:
        // fuzzy logic processing
        ...
        break;
}
лэт ми спик фром май харт
Re[2]: Оператор if должен умереть.
От: Ops Россия  
Дата: 28.05.12 20:51
Оценка: 1 (1) +3 :)
Здравствуйте, Real 3L0, Вы писали:

R3>Даже в этом долбанном for постоянно забываешь в какой последовательности чо там идёт: сначала условие или приращение.


Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Оператор if должен умереть.
От: roro  
Дата: 28.05.12 21:10
Оценка:
Здравствуйте, michael_isu, Вы писали:

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


Попробуйте "плюсолисп"

 bool cond = true;
 (cond
   && (printf("yes"),true)
   || (printf("no"),true)
  );
Re[2]: Оператор if должен умереть.
От: Философ Ад http://vk.com/id10256428
Дата: 28.05.12 21:29
Оценка:
Здравствуйте, Real 3L0, Вы писали:

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


_>>Оператор if — это наверное самый зловещий оператор...


R3>Как не прогер-задрот официально заявляю, чо if — это один из лучших операторов (после присвоения, конечно ).


Как начинающий тролль, официально заявляю:
самый лучший оператор — goto.

Это самый понятный оператор из существующих, притом куда понятнее чем оператор присваивания, т.к. совершенно не известно, что именно будет выполнятся за ширмой
a = b;
Всё сказанное выше — личное мнение, если не указано обратное.
Re: Оператор if должен умереть. Паттерн Несли.
От: B0FEE664  
Дата: 29.05.12 09:59
Оценка: 2 (2)
Здравствуйте, michael_isu, Вы писали:

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


C++ к вашим услугам :

class NoOp
{
public:
  virtual int GetResult() = 0;
  virtual ~NoOp() = 0;
};

//virtual 
NoOp::~NoOp()
{
}


class NoOp_Yes : public NoOp
{
public:
  virtual int GetResult() { return 1; }
  virtual ~NoOp_Yes(){}
};

class NoOp_ReallyNo : public NoOp
{
public:
  virtual int GetResult() { return 6; }
  virtual ~NoOp_ReallyNo(){}
};


NoOp* NewNoOp_ReallyNo()
{
  return new NoOp_ReallyNo;
}


NoOp* NewNoOp_Yes()
{
  return new NoOp_Yes;
}


NoOp* WithoutOp(bool b)
{
  NoOp* (*arr[2])();
  
  arr[0] = NewNoOp_ReallyNo;
  arr[1] = NewNoOp_Yes;

  NoOp* p = arr[b]();
  return p;
}


int main()
{
  int n = 2;
//  int a;
//  
//  if ( n > 2 )
//    a = 1;
//  else
//    a = 6;
//
// No 'if' ! Just call:  
  NoOp* pResultGenerator = WithoutOp(n > 2);
  int   a = pResultGenerator->GetResult();
  delete pResultGenerator;

  std::cout << "Result:" << a << std::endl;
  std::cout << "end" << std::endl;
  //getch();
  return 0;
}


Программа выводит на печать 1 при условии, что n больше 2, и 6 — в противном случае.
Хоть и без tempate'ности, зато с виртуальным деструктором и массивом указателей на функции!
Нарекаю данный паттерн No-if-pattern. Говоря по-русски: Паттерн Несли.
И каждый день — без права на ошибку...
Re[3]: Оператор if должен умереть.
От: FR  
Дата: 29.05.12 11:28
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, Real 3L0, Вы писали:


R3>>Даже в этом долбанном for постоянно забываешь в какой последовательности чо там идёт: сначала условие или приращение.


Помню как-то раз полдня провел в веселой отладке из-за перепутанных условий в for
Re: Оператор if должен умереть.
От: FR  
Дата: 29.05.12 11:32
Оценка:
Здравствуйте, michael_isu, Вы писали:

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


Лучше сразу в пролог, там от оператора if одна стрелка осталась
Re[3]: Оператор if должен умереть.
От: koodeer  
Дата: 29.05.12 14:52
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Как начинающий тролль, официально заявляю:

Ф>самый лучший оператор — goto.

Ф>Это самый понятный оператор из существующих, притом куда понятнее чем оператор присваивания, т.к. совершенно не известно, что именно будет выполнятся за ширмой

Ф>a = b;

В некоторых диалектах бейсика был возможен такой вариант:
goto a
где a — переменная. Ну и куда перейдёт управление? Как это узнать просто глядя на код? Только прогоняя код пошагово...
Re[3]: Оператор if должен умереть.
От: novitk США  
Дата: 29.05.12 15:01
Оценка: +1 :)
Здравствуйте, batu, Вы писали:

B>Кто мешает написать что именно предлагаешь сделать


Он только что об этом написал в другой ветке — Горбачев
Автор: Just Men
Дата: 28.05.12
.
Re[4]: If-statement умер. Да здравствует if-expression!
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.05.12 15:03
Оценка:
Здравствуйте, Qbit86, Вы писали:

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


Q>Ну какбе во всех порядочных языках if — это не то что в Си-подобных языках «if», а то, что в Си-подобных языках «тернарный оператор».


А почему только тернарный? Что за дискриминация? В Erlang у if сколько угодно веток.
The God is real, unless declared integer.
Re[4]: Оператор if должен умереть.
От: Just Men  
Дата: 29.05.12 15:13
Оценка:
Здравствуйте, novitk, Вы писали:

B>>Кто мешает написать что именно предлагаешь сделать


N>Он только что об этом написал в другой ветке — Горбачев
Автор: Just Men
Дата: 28.05.12
.


ты что считаешь что можешь загаживать темы про программирование своими любимым нытьем про политику? С чего ты это взял. Тебя банить надо, во первых на "обсуждение" личности а второе за офтопик, а в третьих за глупость. А ну кышь в СВ-помойту.
Просто человек.
Re[5]: Оператор if должен умереть.
От: novitk США  
Дата: 29.05.12 15:32
Оценка:
Здравствуйте, Just Men, Вы писали:

JM>ты что считаешь что можешь загаживать темы про программирование своими любимым нытьем про политику? С чего ты это взял. Тебя банить надо, во первых на "обсуждение" личности а второе за офтопик, а в третьих за глупость. А ну кышь в СВ-помойту.


Не надо пальцы гнуть, я бана не боюсь. Он повышает продуктивность.
Re: Оператор if должен умереть.
От: __kot2  
Дата: 29.05.12 19:43
Оценка: +1
Здравствуйте, michael_isu, Вы писали:
_>Оператор if — это наверное самый зловещий оператор, которым мне приходилось пользоваться. Он является основной причиной возникновения спагетти-кода и как следствие причиной сильной головной боли, когда проект развивается много лет. Только вот пока не додумал, как от него избавиться совсем. Какие варианты? или мне пора в ФП?
мне кажется что проблема спагетти кода и прочего надуманная.
то есть нет большой проблемы писать так, чтобы было просто и понятно.
чаще применяется "осознанный вандализм" — код специально усложняется, чтобы его было сложно поддерживать
Re[4]: Оператор if должен умереть.
От: Ziaw Россия  
Дата: 30.05.12 12:39
Оценка:
Здравствуйте, koodeer, Вы писали:

K>В некоторых диалектах бейсика был возможен такой вариант:

K>goto a
K>где a — переменная. Ну и куда перейдёт управление? Как это узнать просто глядя на код? Только прогоняя код пошагово...

Между прочим это прародитель ФВП. По крайней мере я это как-то раз использовал в школе как указатель на функцию (хотя и не знал этого) и был ужасно горд красотой решения.

Давайте делиться "изобретенными" костылями, которые легко и удобно делаются на других языках (особенно если знаешь теорию).

Я лично "изобретал":
Односвязные списки на массивах в том же бейсике. Полиморфизм в С через union и указатель на функцию. Аналог продолжений на C# через yield return.

Все это уже можно было найти в литературе в то время, но я не знал как это называется и изобретал сам. Рассказывайте, уверен, например, что большинство старожилов "изобрели" почти все паттерны GoF до прочтения книги.
Re[5]: Оператор if должен умереть.
От: Ops Россия  
Дата: 30.05.12 13:04
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Все это уже можно было найти в литературе в то время, но я не знал как это называется и изобретал сам. Рассказывайте, уверен, например, что большинство старожилов "изобрели" почти все паттерны GoF до прочтения книги.


Так GoF только с терминологией и помогает разобраться, у них так и написано. Эти "паттерны" сами возникают при решении задач, читал ты книжку, или нет.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[6]: Оператор if должен умереть.
От: Ziaw Россия  
Дата: 30.05.12 19:06
Оценка:
Здравствуйте, Ops, Вы писали:

Z>>Все это уже можно было найти в литературе в то время, но я не знал как это называется и изобретал сам. Рассказывайте, уверен, например, что большинство старожилов "изобрели" почти все паттерны GoF до прочтения книги.


Ops>Так GoF только с терминологией и помогает разобраться, у них так и написано. Эти "паттерны" сами возникают при решении задач, читал ты книжку, или нет.


В целом верно. Но тот же визитор, при решении задач сам не возникает. Его "изобрести" надо.
Re[7]: Визитор
От: Qbit86 Кипр
Дата: 30.05.12 19:10
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>В целом верно. Но тот же визитор, при решении задач сам не возникает. Его "изобрести" надо.


Я лично «изобретал» двойную диспетчеризацию на базе двумерной таблички функций (точнее, ассоциативный контейнер с ключом из пары типов), лишь бы Визитор не «изобретать» :)
Глаза у меня добрые, но рубашка — смирительная!
Re[8]: Визитор
От: Ziaw Россия  
Дата: 31.05.12 02:16
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Я лично «изобретал» двойную диспетчеризацию на базе двумерной таблички функций (точнее, ассоциативный контейнер с ключом из пары типов), лишь бы Визитор не «изобретать»


И я подобное делал, правда по одному типу. Визитор тот еще монстр. Но само решение достаточно интересное.
Re[7]: Оператор if должен умереть.
От: Ops Россия  
Дата: 31.05.12 20:50
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>В целом верно. Но тот же визитор, при решении задач сам не возникает. Его "изобрести" надо.


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