Возможно ли избегнуть много "или" (||) в условиях, вызывающих одно и то же действие?

 

Ни один из операторов не подходит. Может, есть какой-нибудь другой способ без if(A || B || C || D || E) Action;?

Прошу модераторов не отправлять в общую ветку вопрошающих ввиду важности вопроса, над которым думаю и не могу найти более рационального решения! Спасибо!

 

можно просто в булевских переменных, например

X=A || B;

X=X || C || D; 

X=X || E;

if (X) Action;

 
Avals:

можно просто в булевских переменных, например

X=A || B;

X=X || C || D; 

X=X || E;

if (X) Action;

Спасибо за отклик! И эти bool'и могут быть достаточно сложные, включающие много параметров, зависящих от постоянно меняющихся условий рынка?
 
borilunad:
Спасибо за отклик! И эти bool'и могут быть достаточно сложные, зависящие от постоянно меняющихся условий рынка?


конечно

 
Avals:


конечно

Ещё раз спасибо! Сейчас попробую!

Посмотрел в Доке и увидел:

bool a = true;
bool b = false;
bool c = 1;

а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo);
Разве можно булёвой а дать это значение?

 
borilunad:

Ещё раз спасибо! Сейчас попробую!

Посмотрел в Доке и увидел:


Можно, только скорость работы сильно падает
 
Vinin:

Можно, только скорость работы сильно падает
А на скорости не отражаются эти "или" в if()?
 
borilunad:
А на скорости не отражаются эти "или" в if()?

Отражаются конечно. Проверять надо. 
 
Vinin:

Отражаются конечно. Проверять надо. 
Но если нет возможности найти что-то быстрое, тогда остаюсь с if()! Я уже заметно уменьшил торможение, убрав во всех функциях лишние проверки для меня. Большое спасибо за внимание! Рад буду узнать и проверить все возможные варианты!
 

Можно ещё таким способом оптимизировать вычисления:

    bool M = false;

    if (A) M = true; else if (B) M = true; else if (C) M = true; else if (D) M = true; else if (E) M = true;
    if (M) Action;
 

или таким:

    bool M = true;

    if (!A) if (!B) if (!C) if (!D) if (!E) M = false;
    if (M) Action;