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

Не знаю, говорилось уже или нет. В Метаэдиторе при совпадении имени input-переменной с именем локальной переменной (либо с именем поля класса) последняя везде выделяется красным цветом, так же как input-переменная.  Возникает путаница при чтении кода.  Надо бы исправить это.
[Удален]
Alexey Navoykov:
Не знаю, говорилось уже или нет. В Метаэдиторе при совпадении имени input-переменной с именем локальной переменной (либо с именем поля класса) последняя везде выделяется красным цветом, так же как input-переменная.  Возникает путаница при чтении кода.  Надо бы исправить это.

давать одинаковые имена сущностям кода - попытка выстрелить себе в ногу :)

проще изменить имя input переменной и не будет ни каких проблем и путаниц...

MT4/845, Windows7/64 bit. Вопрос по переводе текста на новую строку с помощью \n. Сделал скрипт:

#property strict

string t1="Text_1";
string t2="Text_2";

void OnStart()
  {
   Print(t1+"\n "+t2);
   Print("Text_3"+"\n Text_4");
  }

Результат:


Надеялся, что значения Text_2 и Text_4 будут на других строках. Подскажите что не так.

Konstantin Karpov:

давать одинаковые имена сущностям кода - попытка выстрелить себе в ногу :)

проще изменить имя input переменной и не будет ни каких проблем и путаниц...

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

MT4/845, Windows7/64 bit. Скрипт:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("A: d3 = ",DoubleToString(d3));
   Print("B: d3 = ",DoubleToStr(d3));
   Print("C: d3 = ",DoubleToString(d3,16));
   Print("D: d3 = ",DoubleToString(d3,8));
   Print("E: d3 = ",DoubleToString(NormalizeDouble(d3,8)));
   Print("F: d3 = ",DoubleToString(NormalizeDouble(d3,7)));
   Print("G: d3 = ",DoubleToString(NormalizeDouble(d3,8),7));
   Print("H: d3 = ",DoubleToString(NormalizeDouble(d3,8),8));
  }
//+------------------------------------------------------------------+

Результат:


Кто-нибудь знает как можно на печать вывести цифру 0.55001234 ?

[Удален]
Maxim Khrolenko:

MT4/845, Windows7/64 bit. Скрипт:

Результат:


Кто-нибудь знает как можно на печать вывести цифру 0.55001234 ?

 

 Print("C: d3 = ",DoubleToString(d3,8));

 

Maxim Khrolenko:

MT4/845, Windows7/64 bit. Вопрос по переводе текста на новую строку с помощью \n. Сделал скрипт:

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

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

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

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

Konstantin Karpov:

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

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

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