Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
По мне - код всегда должен быть максимально прозрачным и ясным.
Если есть малейшее сомнение в том, что написанное можно понять неоднозначно - то надо всемерно избегать таких конструкций.
Одна из них, вот эта самая "if( X == Y == Z)". Как тут верно написали, результат зависит от преобразований и принятого порядка операций, что далеко не всегда сразу видно.
Лично на мой взгляд, даже оператор "вопросик" - недостаточно прозрачный. Эффективность его абсолютно такая же, как эффективность "обычного" if(), а вот с ясностью выполняемых действий - не всегда всё сразу ясно.
По этой же причине - я считаю недопустимыми конструкции вроде
(T *)((char *)(p++) + 3 * (--sizeof (T)))
Как правило, расписывание тех же громоздких выражений в несколько строк с ясными действиями в каждой - ничуть не уменьшает эффективность кода, однако, существенно улучшает понимание, что происходит на данном участке.
В редких случаях, когда есть возможности разночтений, но изменённое написание заметно замедляет код - такой код должен быть подробно прокомментирован.
Внимание: Приоритет выполнения операций в языке MQL5 соответствует приоритету, принятому в языке С++, и отличается от приоритета, заданного в языке MQL4.
<
<=
>
>=
Меньше, чем
Меньше или равно
Больше, чем
Больше или равно
Слева направо
Следовательно if( X == Y == Z) читается так:
Если X равен Y — это уже булево значение равное 1 или true
Дальше — Если 1==Z будет соответственно 1 или true иначе 0 или false
Если же X не равен Y — значение 0 или false
Если 0==Z будет соответственно 1 или true иначе 0 или false
НО!!! Тут такой подвох, что false это 0, а всё остальное true, то всё зависит от значения и типа Z.
А в общем-то да
По мне - код всегда должен быть максимально прозрачным и ясным.
о мне - код всегда должен быть максимально прозрачным и ясным.
Лично на мой взгляд, даже оператор "вопросик" - недостаточно прозрачный. Эффективность его абсолютно такая же, как эффективность "обычного" if(), а вот с ясностью выполняемых действий - не всегда всё сразу ясно.
Есть хорошее правило - не использовать вложенные тернарные операторы. Если его придерживаться то будет не менее прозрачно, чем при использовании if. Visual studio для C# сразу ворнинг дает при попытке использовать вложенные тернарные операторы. Относительно часто упоминаю про C#, так как это, грубо говоря, единственное, с чем я могу сравнивать.
Лично на мой взгляд, даже оператор "вопросик" - недостаточно прозрачный. Эффективность его абсолютно такая же, как эффективность "обычного" if(), а вот с ясностью выполняемых действий - не всегда всё сразу ясно.
Ну с вопросиком несколько проще понимание, когда отделяешь одно от другого скобками. Т.е. скобки нужны в основном не программе, а программисту, чтобы поставил где-то курсор, левая и правая скобки подсветились и видно к чему относится то или иное условие...
К примеру, я вопросик использую для того, чтобы в одной строке условия сразу прописать условия и для бай, и для селл.
Говорят, что так практически никто не пишет, зато код получается наикратчайшим, с минимумом фигурных скобок и, в то же самое время, понятным для редактирования.
А иначе приходится прописывать сначала все для бай, а потом то же самое для селл с небольшими изменениями... А также короткие вычисления влияют на скорость расчетов. Если в реальном времени это не заметно, то в тестере это очень заметно становится...
Ну теперь хоть стало понятно как читать if(X == Y == Z), т.е. по нормальному это читается как if( (X==Y) == (bool)Z ) и никак иначе...
Ну теперь хоть стало понятно как читать if(X == Y == Z), т.е. по нормальному это читается как if( (X==Y) == Z) и никак иначе...
В определенных ситуациях возможность похожей записи полезна/удобна.
В определенных ситуациях возможность похожей записи полезна/удобна.
Это совсем другое.
Это присваивание, где сначала в переменную A записывается значение 2, а потом в переменную B записывается значение переменной А.
И количество этих присваиваний не ограничено.
Это совсем другое.
В определенных ситуациях возможность похожей записи полезна/удобна.
Написал же.
В определенных ситуациях возможность похожей записи полезна/удобна.
а они не похожие - они просто РАЗНЫЕ..
а они не похожие - они просто РАЗНЫЕ..
Занудство - оно такое.