Неожиданно столкнулся с проблемой, например, есть в коде булево выражение:
if (ShouldWeOpenAnOrder() && !CreateOrder())
...
Так вот, несмотря на то, что первая часть выражения может возвращать false, вторая все-равно всегда выполняется и чтобы логика правильно работала приходится преобразовывать к виду:
if (ShouldWeOpenAnOrder())
if (!CreateOrder())
...
Это известная проблема?
Это если бы в условии было "или" - ||.
Я с Вами согласен, неэффективно! Можно записать в качестве пожеланий к MQ5.
Никогда об этом не задумывался и самому стало интересно как этот вопрос решает мелкомягкий .
Решил проверить на VC 6.0 - действительно при наличии первого false проверка заканчивается без проверки остальных условий!
Неожиданно столкнулся с проблемой, например, есть в коде булево выражение:
if (ShouldWeOpenAnOrder() && !CreateOrder())
...
Так вот, несмотря на то, что первая часть выражения может возвращать false, вторая все-равно всегда выполняется и чтобы логика правильно работала приходится преобразовывать к виду:
if (ShouldWeOpenAnOrder())
if (!CreateOrder())
...
Это известная проблема?
о, я тоже сталкивался с этой проблемой!
у меня было так:
if( iBar>30 && checkWaveSeries(iBar) )
{
}
и всегда функция checkWaveSeries() вызывалась, и создавала проблемы....
пришлось сделать так
if( checkWaveSeries(iBar) )
{
}
Раньше такое замечал, но думал что эти баги в программе не допустимы и поэтому не обращал особого внимания.
Неужели придется переделывать своих советников?
А если такая операция:
if (выражение1 && выражение2 && выражение3 && ........ && выражениеN)
Тогда что делать?
Раньше такое замечал, но думал что эти баги в программе не допустимы и поэтому не обращал особого внимания.
Неужели придется переделывать своих советников?
А если такая операция:
if (выражение1 && выражение2 && выражение3 && ........ && выражениеN)
Тогда что делать?
все нормально должно быть...
этот вопрос проверка на тупость или я чего-то не понимаю ?
по-моему так и должно работать - чтобы получить результат условия, которое является составным условие1 && условие2,
то для этого необходимо получить результат каждого в отдельности.. оно так и происходит, дело в том, что
независимо от того, что возвращают ваши функции (true|false) это означает, что функции корректно отработали..
а чтобы было так как вы хотите, то в ShouldWeOpenAnOrder должна возникниуть исключительная ситуация типа необработанная ошибка деление на ноль
например
bool a(){ int a = 1, b = 0; a = a / b; return(true); } bool b(){ Print("b working.."); return(true); } // вторая функция не отработает if (a() && b()) Print("yes");
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Неожиданно столкнулся с проблемой, например, есть в коде булево выражение:
if (ShouldWeOpenAnOrder() && !CreateOrder())
...
Так вот, несмотря на то, что первая часть выражения может возвращать false, вторая все-равно всегда выполняется и чтобы логика правильно работала приходится преобразовывать к виду:
if (ShouldWeOpenAnOrder())
if (!CreateOrder())
...
Это известная проблема?