Ошибки, баги, вопросы - страница 3491

fxsaber #:

Интересна причина, почему так сделано в названных языках.

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

Надо проинспектировать свои алгоритмы, т.к. раньше был уверен, что такого не происходит в MQL5. Точно не происходило. Упустил момент изменения.

Nikolai Semko #:
Упустил момент изменения
Этот момент был достаточно давно. И в справке отображено.
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Область видимости и время жизни переменных - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Artyom Trishkin # :
Этот момент был достаточно давно. И в справке отображено .
Да. Но до недавнего времени об этом предупреждали.
Artyom Trishkin #:
Этот момент был достаточно давно. И в справке отображено.

Этот момент появился относительно недавно. Буквально пару месяцев.

Вот на такую конструкцию, компилятор раньше ругался.

   for(int i = 0; i < total; i++)
      for(int i = 0; i < total; i++)
         for(int i = 0; i < total; i++)
           {

           }

А сейчас всё норм.  

Но это не правильно, так как это не норм.


Раньше компилятор на это ругался

int i = 1;
if(true)
   int i = 5;

на это не ругался

if(true)
    int i = 5;
 int i = 1;

И это было логично. Сейчас компилятор действует не логично.

Стало намного сложнее отслеживать переменные и сто раз перепроверять нет ли с таким же именем переменной объявленной ранее.


В справке действительно написано, но раньше оно так не работало.

Nikolai Semko #:

что-то я юмора не понял. 
Так же раньше не было

ошибок и предупреждений не выдает
вывод:

6

8

6

В MT4, теперь, тоже так сделали. Предупреждение есть.

Aleksandr Slavskii #:

Этот момент появился относительно недавно. Буквально пару месяцев.

Вот на такую конструкцию, компилятор раньше ругался.

А сейчас всё норм.  

Но это не правильно, так как это не норм.


Раньше компилятор на это ругался

на это не ругался

И это было логично. Сейчас компилятор действует не логично.

Стало намного сложнее отслеживать переменные и сто раз перепроверять нет ли с таким же именем переменной объявленной ранее.


В справке действительно написано, но раньше оно так не работало.

По-моему лучше избегать применения переменных с одинаковыми именами во избежание подобных казусов.
Конечно в некоторых случаях одинаковые имена полезны, но надежность кода во главе угла.

Alexander Sevastyanov #:

Конечно в некоторых случаях одинаковые имена полезны

Есть пример полезности?

fxsaber #:

Есть пример полезности?

Вложенные и перевложенные циклы. Имена счетчиков делаю разными. 
Valeriy Yastremskiy #:
Вложенные и перевложенные циклы. Имена счетчиков делаю разными. 

У меня сложности с трактовкой написанного. Лучше кодом.

fxsaber #:

У меня сложности с трактовкой написанного. Лучше кодом.

int i=0;
for(j=0;j<3;j++) 
{  print(  i+j);
for(g=0;g<5;g++) 
{print( i+g+j) ;}}
i++

С телефона) мне не нравится нововведение. До цикла объявленные переменные видимы в цикле и когда одинаковые имена будет пере назначение. Или тогда внутри цикла видимы только глобальные и внутренние переменные.