Вопрос про конструкцию return (true && false && true)

 

Добрый день.

Прошу прощенья если уже разжовывалось.

Вопрос по логике действия программы:


Функция для конкретики:

bool TestFunc(void)

{

return (true && false && (1 == 1) && true);

}

Будет ли в данной ситуации программа  высчитывать 1 == 1 ?  или же увидит что везде стоят && и дойдя до первого false выйдет из функции со значением false?

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 
tiocrypto:


Будет ли в данной ситуации программа  высчитывать 1 == 1 ?  или же увидит что везде стоят && и дойдя до первого false выйдет из функции со значением false?

К логическим выражениям применяется схема так называемой "короткой оценки", то есть, вычисление выражения прекращается в тот момент, когда можно точно оценить результат выражения.

Справочник MQL5 / Основы языка / Операции и выражения / Логические операции
 
tiocrypto:

Добрый день.

Прошу прощенья если уже разжовывалось.

Вопрос по логике действия программы:


Функция для конкретики:

bool TestFunc(void)

{

return (true && false && (1 == 1) && true);

}

Будет ли в данной ситуации программа  высчитывать 1 == 1 ?  или же увидит что везде стоят && и дойдя до первого false выйдет из функции со значением false?

Возвратить(1 и 0 и 1 и 1) что это за бред вообще 
 
void OnStart()
  {
   for(int i = 1; i <= 10; i++)
      Print("test ", i, ", result ", test());
  }

bool test()
  {
   return f1() && (f2() == f3()) && f4();
  }

bool f1()
  {
   Print(__FUNCTION__);
   return bool(MathRand() % 2);
  }

bool f2()
  {
   Print(__FUNCTION__);
   return bool(MathRand() % 2);
  }

bool f3()
  {
   Print(__FUNCTION__);
   return bool(MathRand() % 2);
  }

bool f4()
  {
   Print(__FUNCTION__);
   return bool(MathRand() % 2);
  }
 
Vladislav Boyko #:
bool test()   {    return f1() && (f2() == f3()) && f4();
Благодарю, за наглядный ответ. А то голову ломал как бы это проверить. Причем видно что расчет функций идет по порядку строго слева на право. То есть с точки зрения оптимизации программы тяжелые для вычисления функции лучше оставлять справа, так как до них очередь может вообще не дойти.
 
tiocrypto #:
Благодарю, за наглядный ответ. А то голову ломал как бы это проверить. Причем видно что расчет функций идет по порядку строго слева на право. То есть с точки зрения оптимизации программы тяжелые для вычисления функции лучше оставлять справа, так как до них очередь может вообще не дойти.

Не только тяжёлые для вычисления. Ещё и наиболее вероятные условия, первыми проверяя наименее вероятные.