Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 496

 
pako:
Так попробуйте

Так мне не надо - зачем мне 365 дней?


Alexey Viktorov:

Ну по сути, да, предупреждение не ошибка. Но как отработает начальный вариант if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy ) ? Или руки обломятся поставить пару скобок?

Руки то не обломятся, просто не думал, что в этом есть необходимость - или может изменится логика приоритетов компилятора и это нужно что б код продолжил правильно работать?


Artyom Trishkin:

А какая компилятору тут польза, ведь значение по прежнему может быть отрицательно!?

Вообще компилятор на любимый многими "i" вопит не меньше ;)

 
-Aleks-:

Так мне не надо - зачем мне 365 дней?


Руки то не обломятся, просто не думал, что в этом есть необходимость - или может изменится логика приоритетов компилятора и это нужно что б код продолжил правильно работать?


А какая компилятору тут польза, ведь значение по прежнему может быть отрицательно!?

Вообще компилятор на любимый многими "i" вопит не меньше ;)

Если Low[X] всегда меньше High[X], достаточно писать

if (Low[X]>PriceBuy || High[X]<PriceBuy), что и быстрее работало бы!

 
Boris:

Если Low[X] всегда меньше High[X], достаточно писать

if (Low[X]>PriceBuy || High[X]<PriceBuy), что и быстрее работало бы!

Согласен - можно короче, просто когда пишу не думаю над оптимизацией - откладываю на потом... спасибо. 
 
-Aleks-:

Так мне не надо - зачем мне 365 дней?


Руки то не обломятся, просто не думал, что в этом есть необходимость - или может изменится логика приоритетов компилятора и это нужно что б код продолжил правильно работать?


А какая компилятору тут польза, ведь значение по прежнему может быть отрицательно!?

Вообще компилятор на любимый многими "i" вопит не меньше ;)

Если меньше ноля, то и цикла не будет. Вы всё бездумно делаете?
[Удален]  
-Aleks-:

Так мне не надо - зачем мне 365 дней?

Вообще компилятор на любимый многими "i" вопит не меньше ;)

Пишите правильно , воплей не будет
 
Artyom Trishkin:
Если меньше ноля, то и цикла не будет. Вы всё бездумно делаете?

А чем мой вариант отличается от Вашего в таком случае?

Я не мог бы всё делать бездумно, но иногда этого хотелось бы...


pako:
Пишите правильно , воплей не будет

Как правильно? Я вот только учусь азам - поэтому и вопросы тут задаю, зачем мне говорить "правильно делай", если я не знаю как оно должно быть правильно? ;)

Так как избежать предупреждения об ошибке, если в циклах обычно происходит инициализация переменной "i"?

 
-Aleks-:

А чем мой вариант отличается от Вашего в таком случае?

Я не мог бы всё делать бездумно, но иногда этого хотелось бы...


Как правильно? Я вот только учусь азам - поэтому и вопросы тут задаю, зачем мне говорить "правильно делай", если я не знаю как оно должно быть правильно? ;)

Так как избежать предупреждения об ошибке, если в циклах обычно происходит инициализация переменной "i"?

Читайте справку о видимости переменных.
[Удален]  
-Aleks-:

Как правильно? Я вот только учусь азам - поэтому и вопросы тут задаю, зачем мне говорить "правильно делай", если я не знаю как оно должно быть правильно? ;)

Так как избежать предупреждения об ошибке, если в циклах обычно происходит инициализация переменной "i"?

здесь русским по белому написано https://docs.mql4.com/ru/basis/operators/for

 

                                               

Оператор цикла for - Документация на MQL4
  • docs.mql4.com
Оператор цикла for - Документация на MQL4
 
pako:

здесь русским по белому написано https://docs.mql4.com/ru/basis/operators/for

 

                                                    https://docs.mql4.com/ru/basis/variables/variable_scope 

Спасибо, но первую ссылку я ранее читал, а вторая подтвердила логику которой я пользовался при написании кода.

Однако смущает это утверждение из второй ссылки "... за пределами этого цикла действует другая переменная с тем же именем...", из неё следует, что значение глобальной переменной останется прежним не смотря на то, что внутри блока  будет объявлена новая переменная с таким же именем, но сие бред так как если объявить новую переменную, то значение прежней затрется, тогда мне не ясно, какой тут смысл использовать и хранить две разных переменных (локальную и глобальную), но с одинаковым значением?

 
-Aleks-:

Спасибо, но первую ссылку я ранее читал, а вторая подтвердила логику которой я пользовался при написании кода.

Однако смущает это утверждение из второй ссылки "... за пределами этого цикла действует другая переменная с тем же именем...", из неё следует, что значение глобальной переменной останется прежним не смотря на то, что внутри блока  будет объявлена новая переменная с таким же именем, но сие бред так как если объявить новую переменную, то значение прежней затрется, тогда мне не ясно, какой тут смысл использовать и хранить две разных переменных (локальную и глобальную), но с одинаковым значением?

По-моему, вы бред пишите. Если объявить локальную переменную внутри цикла ли, функции ли, то значение глобальной переменной с тем же именем не затрётся, а останется прежним, но компилятор вас предупредит, что вы объявили локальную переменную с таким же именем, как и уже существующая глобальная, и работа внутри функции или блока кода, в пределы видимости которого входит вновь объявленная переменная, не повлияет на значение глобальной переменной. Он вас предупреждает об этом, чтобы вы понимали, что это новая переменная, и чтобы вы не ожидали изменения значения глобальной переменной после выхода за пределы видимости блока, в котором объявили новую переменную с таким же именем, как уже существующая глобальная.

По-простому: всё, что находится внутри квартиры - всё относится ко всем комнатам и во всех комнатах оно обще-квартирное (глобальная переменная). А всё, что находится внутри комнаты - то относится только к комнате, и не видно из других комнат (это локальные переменные).

Ещё проще? Пожалуйста:

Если вы испортили воздух в туалете (локально), то он именно там и испорчен. При этом во всей квартире (глобально) знают (результат ваших туалетных опытов), что в туалет лучше не соваться... Но воздух - понятие для всей квартиры, и все жильцы знают об испорченном воздухе в туалете. При этом лишь счастливчик, находящийся в туалете, может в полной мере ощутить все прелести изменения локальной обстановки в пределах замкнутого пространства (локальное влияние значения переменной). Остальные об этом знают, но не ощущают. Когда же вы покидаете туалет, то теряете ощущения (локальные значения), которые испытывали в туалете, и начинаете дышать свежим воздухом (получаете глобальные значения воздуха), при этом, как и все остальные, зная, что в толчке пипец (результат работы функции заражения воздуха, влияющий на общий процесс жизнедеятельности всей квартиры)...

Надеюсь, понятно рассказал