Иногда всё же приходится избегать сложных условий в одном операторе if.

 

Приведу пару конструкций условий с оператором if, которые программист обычно применяет при написании программы на MQL4.

Конструкция №1: один оператор if с использованием сложного условия.

extern bool Condition = False;
int K = 0;

int fun()
{
   K = 1;
   return(1);
}

int init()
{
   if (Condition && fun() == 1)
      K = 2;
   Print(K);
}

Конструкци №2: использование сложного условия с помощью двух оператор if.

extern bool Condition = False;
int K = 0;

int fun()
{
   K = 1;
   return(1);
}

int init()
{
   if (Condition)
      if (fun() == 1)
         K = 2;
   Print(K);
}

А Вы знали, что две эти конструкции оператора if работают по разному?

В конструкции №1, даже если и не выполнится условие Condition, функция fun() присвоит переменной K значение "1", т.е. второе условие, а вместе с ним функция, также выполнятся. Казалось бы условие Condition стоит первым, так как оно главенствующее и остальное уже не важно! Но компилятор этого не поймёт... Например, нужно на время отключить выставление позиций в безубыток или трал, или какой-то критерий определения тренда у советника.

Если в функции нет внешних переменных, то она просто выполнится в холостую и ничего не произойдёт. А если всё же есть? Программист может легко запутаться при тестировании программы. Да и холостые операции Никому не нужны. Падает быстродействие, что не мало важно.

По конструкции №2 думаю пояснений не нужно.

Зачем была создана тема? Чтобы предостеречь неопытных программистов, Наших новичков. Выслушать мнение профи. Может Я чего-то упустил. Или данное обсуждение уже выдвигалась, тогда прошу снести тему и написать в личку ссылку, если это возможно. :)))

 

Спасибо! Я как знал... :))

В MT5 этого нет, УРА!

Причина обращения: