Иногда встречаю, особенно в старых кодах, вот такие условия
if( X == Y == Z) или if(X == Y == true) или if(X < Y < 50)
Компилятор не выдает ни ошибок, ни предупреждений.
Это вообще нормально такой формат для mql ?
Как программа это читает?
По идее, сначала сравниваются первые два значения. Получается предположим true или false, а потом сравнивается с третьим значением?
Или сразу сравниваются три значения между собой?
Навскидку:
Результат опратора "==" - булев.
Поэтому первое имеет смысл, если Z - bool (или любой целый тип, но это уже "некрасиво").
Второе - тавтология ))
Третье - скорее всего ошибка.
Навскидку не надо. Додумывать и сам умею.
Мне нужен тот, кто сможет прояснить ситуацию. Просто такое встречаю не первый раз. Вот и хочу выяснить как программа читает такие условия. Она же работает и чего-то считает. А вот что именно и как производятся вычисления программой - это и хочу выяснить, ведь компилятор проглатывает такое, да и программа как-то работает и чего-то рассчитывает. А вот чего именно - не понятно...
Может есть тут такие, которые сами так пишут?
Можно предположить, что это выглядит так: if( (X==Y) ==Z) , но тогда третий вариант получится if( (X<Y) < 50)
или это выглядит так: if( X<Y && Y<50)
Короче, запутался...
А шо питонщики молчат? Это же их приколы.
https://docs.python.org/3/reference/expressions.html#comparisons
Also unlike C, expressions like a < b < c have the interpretation that is conventional in mathematics.
Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).
Даже проверять не хочу, поддерживает ли MQL chained comparisons (надеюсь, что нет😄)
В МТ5
Print(1 < 2 > 3); // false Print(1 > 2 < 3); // true
Print("1 < 2 > 3 ", 1 < 2 > 3); // false Print("(1 < 2) > 3 ", (1 < 2) > 3); // false Print("true > 3 ", true > 3); // false Print("1 > 2 < 3 ", 1 > 2 < 3); // true Print("(1 > 2) < 3 ", (1 > 2) < 3); // true Print("false < 3 ", false < 3); // true int X = 70; int Y = 60; Print("70 < 60 < 50 ", X < Y < 50); // true
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Иногда встречаю, особенно в старых кодах, вот такие условия
if( X == Y == Z) или if(X == Y == true) или if(X < Y < 50)
Компилятор не выдает ни ошибок, ни предупреждений.
Это вообще нормально такой формат для mql ?
Как программа это читает?
По идее, сначала сравниваются первые два значения. Получается предположим true или false, а потом сравнивается с третьим значением?
Или сразу сравниваются три значения между собой?