Не могу понять вот это вот выражение
Вообще-то лучше бы написать
Хотя по сути результат будет тот же.
if(StopLoss!=0)это более читабельно и логично выглядит.
Хотя по сути результат будет тот же.
Simca:
Вообще-то лучше бы написать
Хотя по сути результат будет тот же.
Спасибо
Вообще-то лучше бы написать
if(StopLoss!=0)это более читабельно и логично выглядит.
Хотя по сути результат будет тот же.
Да, причём судя по справке в MetaEditor, первое выражение неверное.
Порядок операций таков:
Т.е. с начала выполнится унарная операция !, у которой приоритет на 4 порядка выше, применительно к переменной StopLoss, что выйдёт из логического отрицания целого числа, сказать трудно, вероятно, сравнение 0/не 0, это же не побитовое отрицание ~. А затем к этому непонятному результату будет применено сравнение с нулем == 0. В итоге может получиться полный бред.
Отсуда правило кодирования - всегда ставьте скобки для полной определённости, даже если чувствуете себя полным гением создания запутанных выражений.
Или поменяйте выражение на однозначно понимаемое, что и предложили в итоге.
Порядок операций таков:
Для каждой группы операций в таблице приоритет одинаков. Чем выше приоритет группы операций, тем выше она расположена в таблице. Порядок выполнения определяет группировку операций и операндов.
() Вызов функции Слева направо [] Выделение элемента массива
! Логическое отрицание Справа налево - Изменение знака ++ Увеличение на единицу (increment) -- Уменьшение на единицу (decrement) ~ Побитовое отрицание (complement)
& Побитовая операция И Слева направо | Побитовая операция ИЛИ ^ Побитовая операция исключающее ИЛИ (eXclude OR) << Сдвиг влево >> Сдвиг вправо
* Умножение Слева направо / Деление % Деление по модулю
+ Сложение Слева направо - Вычитание
< Меньше, чем Слева направо <= Меньше или равно > Больше, чем >= Больше или равно == Равно != Не равно
Т.е. с начала выполнится унарная операция !, у которой приоритет на 4 порядка выше, применительно к переменной StopLoss, что выйдёт из логического отрицания целого числа, сказать трудно, вероятно, сравнение 0/не 0, это же не побитовое отрицание ~. А затем к этому непонятному результату будет применено сравнение с нулем == 0. В итоге может получиться полный бред.
Отсуда правило кодирования - всегда ставьте скобки для полной определённости, даже если чувствуете себя полным гением создания запутанных выражений.
Или поменяйте выражение на однозначно понимаемое, что и предложили в итоге.
Я так и понял, что полная несуразица. Долго голову ломал
chv:
Да, причём судя по справке в MetaEditor, первое выражение неверное.
Еще раз повторю, результат обоих операций ИДЕНТИЧЕН.Да, причём судя по справке в MetaEditor, первое выражение неверное.
Как я и писал, операция вида :
if(!StopLoss==0)визуально выглядит криво, поэтому лучше пользоваться операцией:
if(StopLoss!=0)она более читабельна, логична и понятна.
Хотя, повторюсь, по сути результат будет тот же.
Вот пример кода подтверждающий что результат совпадает для разных типов данных (целых и вещественных):
void start() { int A=0; bool A1=(!A==0); bool A2=(A!=0); int B=200; bool B1=(!B==0); bool B2=(B!=0); double C=0.0; bool C1=(!C==0); bool C2=(C!=0); double D=1.2345; bool D1=(!D==0); bool D2=(D!=0); Comment("A: ",A," не равно 0 - Вар.1=",A1," Вар.2=",A2,"n", "B: ",B," не равно 0 - Вар.1=",B1," Вар.2=",B2,"n", "C: ",C," не равно 0 - Вар.1=",C1," Вар.2=",C2,"n", "D: ",D," не равно 0 - Вар.1=",D1," Вар.2=",D2,"n"); }Запустите этого эксперта и убедитесь что получаются идентичные значения 0 и 1, соответствующие логическим False и True.
В школе есть такая шутка: "сколько будет два плюс два умножить на два". Т.е. выражение 2+2*2.
С ходу отвечают на слух 8, выполняя действия по порядку звучания, хотя это неверно. Порядок операций другой, верный ответ равен 6-ти.
Правильно первое выражение темы нужно писать так: if(!(StopLoss==0)).Со скобками.
В этом случае порядок выполнения операций верный, т.е. совпадающий с логикой. А то, что результаты вышли те же, чистая случайность. Не надо на неё полагаться.
Самы лучший вариант, конечно: if(StopLoss!=0).
С ходу отвечают на слух 8, выполняя действия по порядку звучания, хотя это неверно. Порядок операций другой, верный ответ равен 6-ти.
Правильно первое выражение темы нужно писать так: if(!(StopLoss==0)).Со скобками.
В этом случае порядок выполнения операций верный, т.е. совпадающий с логикой. А то, что результаты вышли те же, чистая случайность. Не надо на неё полагаться.
Самы лучший вариант, конечно: if(StopLoss!=0).
chv:
В школе есть такая шутка: "сколько будет два плюс два умножить на два". Т.е. выражение 2+2*2.
С ходу отвечают на слух 8, выполняя действия по порядку звучания, хотя это неверно. Порядок операций другой, верный ответ равен 6-ти.
Правильно первое выражение темы нужно писать так: if(!(StopLoss==0)).Со скобками.
В этом случае порядок выполнения операций верный, т.е. совпадающий с логикой. А то, что результаты вышли те же, чистая случайность. Не надо на неё полагаться.
Самы лучший вариант, конечно: if(StopLoss!=0).
В школе есть такая шутка: "сколько будет два плюс два умножить на два". Т.е. выражение 2+2*2.
С ходу отвечают на слух 8, выполняя действия по порядку звучания, хотя это неверно. Порядок операций другой, верный ответ равен 6-ти.
Правильно первое выражение темы нужно писать так: if(!(StopLoss==0)).Со скобками.
В этом случае порядок выполнения операций верный, т.е. совпадающий с логикой. А то, что результаты вышли те же, чистая случайность. Не надо на неё полагаться.
Самы лучший вариант, конечно: if(StopLoss!=0).
Ты прав это выражение if(!(StopLoss==0)) вполне логичное и сразу однозначно понимаемое. Легче самому написать, чем понять смысл изощрений
иных писателей.
Всё таки логика должна оставаться логикой - элементарной, однозначной и не вызывать сомнений
Еще вариант - StopLoss==!0
Integer писал (а):
Еще вариант - StopLoss==!0
Неправильный вариант, так как не 0 - это логическое выражение, возвращающее TRUE, то есть целое число
1, а StopLoss - переменная типа double. Выражение будет истинно только
в том случае, когда StopLoss==1.0Еще вариант - StopLoss==!0
А вот не StopLoss возвращает либо FALSE (0), либо TRUE (1)
Это ещё раз подтверждает правило, что ложную гениальность в
создании запутанных выражений проявлять не надо.
Нужно писать код, чтобы он понимался и выполнялся однозначно.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь