Ошибки, баги, вопросы - страница 2208
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Знаменитый вопрос на собеседовании.
тупой, ненужный вопрос, который выявляет только то, знает ли собеседуемый что такое UB. и мало относится к теме обсуждения.
Aleksey Rodionov:
Сижу и соображаю, как может пригодится код префиксной формы ?
ну вообще-то префиксная форма быстрее. правда сейчас можно не заморачиваться, у компилятора хватает мозгов соптимизировать постфиксную форму когда надо
Откуда дровишки? Вы сравнивали результаты операций array[++i]=i и array[i++]=i?
Вопрос на засыпку. Чем отличается постфиксная операция от префиксной операции?
а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...
если есть изменения в mql в рамках возникшего диспута и вы об этом знаете, то как модератор вы обязаны это довести до участников диалога, а не пытаться провести тесты на знания синтаксиса, это в ваши обязанности точно не входит...
и еще, покажите тут всем указания в справке по mql про разницу в постфиксных и префиксных операций, а вот тесты прошлых лет мне говорят о том, что в mql эти операции ранее равнозначны были
ps. кстати специально сейчас проверил пример из диалога
билд 1816 результат == 12
тупой, ненужный вопрос, который выявляет только то, знает ли собеседуемый что такое UB. и мало относится к теме обсуждения.
ну вообще-то префиксная форма быстрее. правда сейчас можно не заморачиваться, у компилятора хватает мозгов соптимизировать постфиксную форму когда надо
Более того, использование подобных конструкций, на мой взгляд, в коде просто недопустимо.
Во-первых, из-за неоднозначности работы на разных реализациях, а еще больше - из-за того, что в таком коде легко допустить ошибку, и непросто разобраться.
Код должен быть прозрачен и понятен с первого взгляда.
Более того, использование подобных конструкций, на мой взгляд, в коде просто недопустимо.
Во-первых, из-за неоднозначности работы на разных реализациях, а еще больше - из-за того, что в таком коде легко допустить ошибку, и непросто разобраться.
Код должен быть прозрачен и понятен с первого взгляда.
просто справку по mql5 уже пора изменить на форму соглашений и правил по языку
а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...
если есть изменения в mql в рамках возникшего диспута и вы об этом знаете, то как модератор вы обязаны это довести до участников диалога, а не пытаться провести тесты на знания синтаксиса, это в ваши обязанности точно не входит...
и еще, покажите тут всем указания в справке по mql про разницу в постфиксных и префиксных операций, а вот тесты прошлых лет мне говорят о том, что в mql эти операции ранее равнозначны были
ps. кстати специально сейчас проверил пример из диалога
билд 1816 результат == 12
А при том, что примеры эти ваши - чисто теоретические. Чисто для студентов. Ни один программист в здравом уме не выпустит такое в продакшен.
Постфиксные и префиксные инкремент и декремент реально используются прежде всего в циклах. Они и называются инкремент и декремент!
Вот примеры
и
Если Вы утверждаете, что префиксные и постфиксные операции работают одинаково, то флаг Вам в руки и барабан на шею.
В случае с префиксным инкрементом, вы получите неинициализированным нулевой элемент массива и ошибку array out of range на последней итерации.
PS. Решил перечитать нашу документацю по этому вопросу по зелёной ссылке https://www.mql5.com/ru/docs/basis/operations/mathoperation
Важное замечание
int i=5;
int k = i++ + ++i;
Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в другую (например, из Borland C++ в MQL5). В общем случае порядок вычислений зависит от реализации компилятора. На практике существуют два способа реализации постдекремента (постинкремента):
В MQL5 в данный момент реализован первый способ вычисления постдекремента (постинкремента). Но даже обладая этим знанием лучше не экспериментировать с использованием данной тонкости.
А при том, что примеры эти ваши - чисто теоретические. Чисто для студентов. Ни один программист в здравом уме не выпустит такое в продакшен.
Постфиксные и префиксные инкремент и декремент реально используются прежде всего в циклах. Они и называются инкремент и декремент!
Вот примеры
и
Если Вы утверждаете, что префиксные и постфиксные операции работают одинаково, то флаг Вам в руки и барабан на шею.
В случае с префиксным инкрементом, вы получите неинициализированным нулевой элемент массива и ошибку array out of range на последней итерации.
может до вашего высокого ума не доходит, еще раз повторю свой вопрос
вам выделенное уже не по глазам?
а теперь к делу, почему в примере который фигурирует в беседе, результат в mql == 12 и не важно высосан он из пальца или нет, при разнице в постфиксных и префиксных операциях, результат должен быть == 13
ps. и я уже не утверждаю, т.к. сейчас проверил и действительно постфиксные и префиксные теперь есть разница, но мой вопрос выше дает основание полагать, что неоднозначностей в языке при компиляции видимо хватает и прежде чем накидываться на кого то в ветке, разберитесь с этими UB, мы тут не при чем
кстати справку смотрю уже перелопатили ))
может до вашего высокого ума не доходит, еще раз повторю свой вопрос
вам выделенное уже не по глазам?
а теперь к делу, почему в примере который фигурирует в беседе, результат в mql == 12 и не важно высосан он из пальца или нет, при разнице в постфиксных и префиксных операциях, результат должен быть == 13
ps. и я уже не утверждаю, т.к. сейчас проверил и действительно постфиксные и префиксные теперь есть разница, но мой вопрос выше дает основание полагать, что неоднозначностей в языке при компиляции видимо хватает и прежде чем накидываться на кого то в ветке, разберитесь с этими UB, мы тут не при чем
кстати справку смотрю уже перелопатили ))
Не хамите.
Кто сказал, что результат должен быть 13? Повторяю, результаты с сайд-эффектами сильно зависят от оптимизации. Даже если к такому выражению не применять оптимизацию, тогда вступает в дело реализация - изменение значения переменной либо сразу после использования, либо после вычисления выражения. Какая из реализаций является правильной?
Мы не собираемся разбираться с UB, на то оно и undefined, и явно написали: "не делайте так"
В каком месте перелопатили справку? Вот я открыл MQL5 reference из MetaEditor билда 1755 от 18 января. Там то же самое написано
Important Notice
int i=5;
int k = i++ + ++i;
Computational problems may occur while moving the above expression from one programming environment to another one (for example, from Borland C++ to MQL5). In general, the order of computations depends on the compiler implementation. In practice, there are two ways to implement the post-decrement (post-increment):
Currently the first way of post-decrement (post-increment) calculation is implemented in MQL5. But even knowing this peculiarity, it is not recommended to experiment with its use.
Ваше первоначальное утверждение заключалось в том, что нет никакой разницы между постфиксными и префиксными операциями. Разве не так?
Не хамите.
Кто сказал, что результат должен быть 13? Повторяю, результаты с сайд-эффектами сильно зависят от оптимизации. Даже если к такому выражению не применять оптимизацию, тогда вступает в дело реализация - изменение значения переменной либо сразу после использования, либо после вычисления выражения. Какая из реализаций является правильной?
Мы не собираемся разбираться с UB, на то оно и undefined, и явно написали: "не делайте так"
В каком месте перелопатили справку? Вот я открыл MQL5 reference из MetaEditor билда 1755 от 18 января. Там то же самое написано
Important Notice
int i=5;
int k = i++ + ++i;
Computational problems may occur while moving the above expression from one programming environment to another one (for example, from Borland C++ to MQL5). In general, the order of computations depends on the compiler implementation. In practice, there are two ways to implement the post-decrement (post-increment):
Currently the first way of post-decrement (post-increment) calculation is implemented in MQL5. But even knowing this peculiarity, it is not recommended to experiment with its use.
Ваше первоначальное утверждение заключалось в том, что нет никакой разницы между постфиксными и префиксными операциями. Разве не так?
я не хамлю, обратите внимание с чего вы начали диалог, т.е. я должен был выполнить код, о котором я и не знал даже - супер
по справке - да, ее сильно перелопатили т.к. когда разбирался (примерно года два назад) с постфикс и префикс операциями в mql, то этого материала, что сейчас явно не помню
в общем тему закрыли, ввели эту разницу и нормально сделали, только предупреждать ведь нужно, что меняете
Подскажите вопрос по частичному закрытию позиции, тип счета RETAIL_HEDGING. Например я закрываю из эксперта половину позиции, должен автоматом открыться новый ордер меньшим лотом. Так вот, в какой момент новый ордер гарантированно будет в терминале? Правильно ли я понимаю, что сразу он появиться после PositionClosePartial не обязан и его нужно ловить где-нибудь в OnTrade ?