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

 
Alexey Navoykov:
Ваш совет бессмысленен практически. Никто специально одинаковые имена не даёт. Код локальных функций живёт своей обособленной жизнью. А внешняя программа - своей.  При этом имена внешних переменных могут со временем меняться, а также добавляться новые внешние переменные.  И если после этого вдруг в одной из сотни функций окажется локальная переменная с таким же именем, то что, по-вашему, надо переименовывать глобальную переменную?   Не стоит искать оправдания багам разработчиков.

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

Если конечно писать код в котором в функциях используются глобальные переменные, тогда конечно придется править многое, но такой код составлен абсолютно без взгляда на будущее, его действительно трудно модернизировать. 

Хотя если смотреть на разработчика (MetaQuotes) потребительским взглядом, то конечно хочется много всего и сразу :) мне бы хотелось для удобства в работе, что бы терминал был кросс-платформенным, но на подобную просьбу будет ответ один - либо пользуйтесь тем что есть либо идите мимо :) 

 
Konstantin Karpov:

Просто измените имя во входных параметрах...

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

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

 
Alexey Navoykov:

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

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

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

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

Как пример, ставьте в имя локальной переменной дополнительный знак _, например _iCount. В этом случае у Вас ни когда не будет проблем с именами переменных, т.к. будет выполняться то что вы мне пытаетесь уже второй раз зачем то объяснять - переменные живут в локальной зоне своей видимости, где были созданы. И ни какая глобальная переменная в этом случае не будет вносить неоднозначность в именах. И закроем на этом наш диспут.

 

Возвращаясь к своему предыдущему посту. MT4/845, Windows7/64 bit, cкрипт:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("AA: d3 = ",d3);
   Print("BB: d3 = ",DoubleToString(d3));
   Print("CC: d3 = ",DoubleToString(d3,8));
   Print("DD: d3 = ",DoubleToString(d3,9));
   Print("EE: d3 = ",DoubleToString(d3,10));
}

Результат:


Администрация, допишите в DoubleToString, что эта функция округляет числа с плавающей точкой до указанной точности.

 

По хорошему не надо называть одинаково локальные и входные переменные

 
Комбинатор:

По хорошему не надо называть одинаково локальные и входные переменные

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

Попробуйте продолжить строку в ME в прилагаемом файле без пробелов

Файлы:
comment.mq5  1 kb
 
При обсуждении какого-либо вопроса, можно давать ссылку на продукт, находящийся в Маркете? Или это будет считаться рекламой и запрещено?
 
Yousufkhodja Sultonov:
При обсуждении какого-либо вопроса, можно давать ссылку на продукт, находящийся в Маркете? Или это будет считаться рекламой и запрещено?
У каждого продукта есть две вкладки: Обсуждение (для только думающих купить) и Отзывы (для купивших). Вот там и происходят дискуссии по продукту.
 

Сомнительный результат компиляции после оператора ? :

int f()
{
        int array[];
        return ( false ? array : array );
}
void OnStart()
{
        Print( f() );
}
// 0 error(s), 0 warning(s)
Результат: 65618 (и как он такой получился?), а должна быть ошибка при компиляции
Причина обращения: