Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 497
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
здесь русским по белому написано https://docs.mql4.com/ru/basis/operators/for
https://docs.mql4.com/ru/basis/variables/variable_scope
Спасибо, но первую ссылку я ранее читал, а вторая подтвердила логику которой я пользовался при написании кода.
Однако смущает это утверждение из второй ссылки "... за пределами этого цикла действует другая переменная с тем же именем...", из неё следует, что значение глобальной переменной останется прежним не смотря на то, что внутри блока будет объявлена новая переменная с таким же именем, но сие бред так как если объявить новую переменную, то значение прежней затрется, тогда мне не ясно, какой тут смысл использовать и хранить две разных переменных (локальную и глобальную), но с одинаковым значением?
Спасибо, но первую ссылку я ранее читал, а вторая подтвердила логику которой я пользовался при написании кода.
Однако смущает это утверждение из второй ссылки "... за пределами этого цикла действует другая переменная с тем же именем...", из неё следует, что значение глобальной переменной останется прежним не смотря на то, что внутри блока будет объявлена новая переменная с таким же именем, но сие бред так как если объявить новую переменную, то значение прежней затрется, тогда мне не ясно, какой тут смысл использовать и хранить две разных переменных (локальную и глобальную), но с одинаковым значением?
По-моему, вы бред пишите. Если объявить локальную переменную внутри цикла ли, функции ли, то значение глобальной переменной с тем же именем не затрётся, а останется прежним, но компилятор вас предупредит, что вы объявили локальную переменную с таким же именем, как и уже существующая глобальная, и работа внутри функции или блока кода, в пределы видимости которого входит вновь объявленная переменная, не повлияет на значение глобальной переменной. Он вас предупреждает об этом, чтобы вы понимали, что это новая переменная, и чтобы вы не ожидали изменения значения глобальной переменной после выхода за пределы видимости блока, в котором объявили новую переменную с таким же именем, как уже существующая глобальная.
По-простому: всё, что находится внутри квартиры - всё относится ко всем комнатам и во всех комнатах оно обще-квартирное (глобальная переменная). А всё, что находится внутри комнаты - то относится только к комнате, и не видно из других комнат (это локальные переменные).
Ещё проще? Пожалуйста:
Если вы испортили воздух в туалете (локально), то он именно там и испорчен. При этом во всей квартире (глобально) знают (результат ваших туалетных опытов), что в туалет лучше не соваться... Но воздух - понятие для всей квартиры, и все жильцы знают об испорченном воздухе в туалете. При этом лишь счастливчик, находящийся в туалете, может в полной мере ощутить все прелести изменения локальной обстановки в пределах замкнутого пространства (локальное влияние значения переменной). Остальные об этом знают, но не ощущают. Когда же вы покидаете туалет, то теряете ощущения (локальные значения), которые испытывали в туалете, и начинаете дышать свежим воздухом (получаете глобальные значения воздуха), при этом, как и все остальные, зная, что в толчке пипец (результат работы функции заражения воздуха, влияющий на общий процесс жизнедеятельности всей квартиры)...
Надеюсь, понятно рассказал
По-моему, вы бред пишите. Если объявить локальную переменную внутри цикла ли, функции ли, то значение глобальной переменной с тем же именем не затрётся, а останется прежним, но компилятор вас предупредит, что вы объявили локальную переменную с таким же именем, как и уже существующая глобальная, и работа внутри функции или блока кода, в пределы видимости которого входит вновь объявленная переменная, не повлияет на значение глобальной переменной. Он вас предупреждает об этом, чтобы вы понимали, что это новая переменная, и чтобы вы не ожидали изменения значения глобальной переменной после выхода за пределы видимости блока, в котором объявили новую переменную с таким же именем, как уже существующая глобальная.
По-простому: всё, что находится внутри квартиры - всё относится ко всем комнатам и во всех комнатах оно обще-квартирное (глобальная переменная). А всё, что находится внутри комнаты - то относится только к комнате, и не видно из других комнат (это локальные переменные).
Ещё проще? Пожалуйста:
Если вы испортили воздух в туалете (локально), то он именно там и испорчен. При этом во всей квартире (глобально) знают (результат ваших туалетных опытов), что в туалет лучше не соваться... Но воздух - понятие для всей квартиры, и все жильцы знают об испорченном воздухе в туалете. При этом лишь счастливчик, находящийся в туалете, может в полной мере ощутить все прелести изменения локальной обстановки в пределах замкнутого пространства (локальное влияние значения переменной). Остальные об этом знают, но не ощущают. Когда же вы покидаете туалет, то теряете ощущения (локальные значения), которые испытывали в туалете, и начинаете дышать свежим воздухом (получаете глобальные значения воздуха), при этом, как и все остальные, зная, что в толчке пипец (результат работы функции заражения воздуха, влияющий на общий процесс жизнедеятельности всей квартиры)...
Надеюсь, понятно рассказал
Открыли истину в своем опусе - спасибо! Получается, что объявление переменной внутри блока с таким же названием, что и глобальная переменная, приводит к блокировки данных от глобальной переменной внутри блока... а предупреждение об уже объявленной переменной значит убрать не удастся, так?
Спасибо, но первую ссылку я ранее читал, а вторая подтвердила логику которой я пользовался при написании кода.
Однако смущает это утверждение из второй ссылки "... за пределами этого цикла действует другая переменная с тем же именем...", из неё следует, что значение глобальной переменной останется прежним не смотря на то, что внутри блока будет объявлена новая переменная с таким же именем, но сие бред так как если объявить новую переменную, то значение прежней затрется, тогда мне не ясно, какой тут смысл использовать и хранить две разных переменных (локальную и глобальную), но с одинаковым значением?
к сожелению там неправильно написано :(
к сожелению там неправильно написано :(
там в справке неправильно написано
Зачем мне даёте код? Не пойму что в нём искать нужно... да и временем ограничен. Можно как-то рассказать для чего всё это и в чём ошибка в справке
это код из справки
об'является "i" в начале функции
потом в цикле снова об'является "i"
это код из справки
об'является "i" в начале функции
потом в цикле снова об'является "i"
Ну не ошибка же: цикл с глобальной i (синяя), и ещё один цикл с локальной i (красная)