Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1416

 
ANDREY:

Спасибо за уточнение.

Кстати желтые плюсы я удалял и компилятор выдавал ошибку. Значит они играют какую то роль во всей этой конструкции. А вот какую....я до сих пор  и не понимаю. Зачем они нужны, если сложение строк осуществляется исключительно при помощи голубых плюсов. А больше в этой конструкции судя по Вашим объяснениям , ничего не складывается ..... если я не ошибаюсь.

И по поводу  string(i)... По поводу приведения типов .... мне более менее  понятно. Не понятно вот что.....  string - это название типа переменной.   i - переменная счетчик обозначающая индекс элемента массива. А почему   i  в круглых скобках () ? Я до сих пор считал что круглые скобки это признак функции. Например  Print( ). И внутрь круглых скобок в некоторых функциях вводят различные данные.  А что обозначают, или какую функцию исполняют круглые скобки применительно к  i  и ко всей этой конструкции  -  string(i). На первый взгляд кажется что раньше у переменной  i  был тип int ( целое число) , а потом Вы изменили тип переменной i  с  int на  string (строковый). Но думать так не позволяют круглые скобки внутри которых стоит 

Спасибо за объяснения.

Это не приведение к типу, а преобразование значения находящее в переменной i

чаще можно видеть так

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";


 

 
Alekseu Fedotov:

Это не приведение к типу, а преобразование значения находящее в переменной i

чаще можно видеть так


 

Спасибо за подсказку. Преобразование значение переменной  i. Что имеется в виду в моем коде?
1. Значение  i было 0 , после 
(string)i+  стало 1 , потом 2 и так до 30. Тогда зачем  (string), а не просто   i++?
2. Тип переменной   i был int, а после   (string)i+ стал  string? Тогда это не преобразование значения, а преобразование типа переменной.


И еще .... может быть Вы мне объясните что складывают желтые плюсы. Или для чего они нужны?   

 eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";

Спасибо за объяснение.

 
ANDREY:

Спасибо за подсказку. Преобразование значение переменной  i. Что имеется в виду в моем коде?
1. Значение  i было 0 , после 
(string)i+  стало 1 , потом 2 и так до 30. Тогда зачем  (string), а не просто   i++?
2. Тип переменной   i был int, а после   (string)i+ стал  string? Тогда это не преобразование значения, а преобразование типа переменной.


И еще .... может быть Вы мне объясните что складывают желтые плюсы. Или для чего они нужны?   

Спасибо за объяснение.

Преобразование типа или явное приведение к типу — это равнозначно. В документации используются оба выражения. Вы правильно заметили оговорку Алексея, именно преобразование типа…

Дальше: Имеем несколько строк

  1. i типа int которое привели явно к типу string (пусть будет 0)
  2. ": "
  3. eArray[i] приведённое к типу string посредством функции DoubleToString (пусть будет 1.6251)
  4. ", "

Значение i увеличивается в цикле при каждой итерации и в эту строку попадает уже оттуда…

Обратите внимание, что плюсы поставлены между этими строками. Эти плюсы складывают эти строки в одну строку. В результате получается строка «0: 1.6251,» И затем эта строка присоединяется к строке имеющейся в переменной eStr оператором +=


 
ANDREY:

Спасибо за подсказку. Преобразование значение переменной  i. Что имеется в виду в моем коде?
1. Значение  i было 0 , после 
(string)i+  стало 1 , потом 2 и так до 30. Тогда зачем  (string), а не просто   i++?
2. Тип переменной   i был int, а после   (string)i+ стал  string? Тогда это не преобразование значения, а преобразование типа переменной.


И еще .... может быть Вы мне объясните что складывают желтые плюсы. Или для чего они нужны?   

Спасибо за объяснение.

С помощью жёлтых плюсиков вы сформировываете строку (текст), которую выводите с помощью   Print();

Тоже самое вы можете сделать с помощью функции     StringConcatenate()

eStr+=StringConcatenate((string)i,": ",DoubleToString(eArray[i],4),", ");
 
Alekseu Fedotov:

С помощью жёлтых плюсиков вы сформировываете строку (текст), которую выводите с помощью   Print();

Тоже самое вы можете сделать с помощью функции     StringConcatenate()

Я не советую использовать эту функцию потому, что она работает в MQL5 совсем не так как в MQL4. Следовательно возможны трудности с пониманием при переходе на язык MQL5


Хотя, может я и не прав…

mql4

string  StringConcatenate( 
   void argument1,         // первый параметр любого простого типа  
   void argument2,         // второй параметр любого простого типа 
   ...                     // следующий параметр любого простого типа 
   );

mql5

int  StringConcatenate( 
   string&  string_var,   // строка для формирования 
   void argument1         // первый параметр любого простого типа  
   void argument2         // второй параметр любого простого типа 
   ...                    // следующий параметр любого простого типа 
   );

Как можете заметить, в mql5 очень похоже на простое сложение строк.

 eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
 StringConcatenate(eStr, i, ": ", eArray[i], ", ");
И преобразование типа происходит в этой функции без дополнительных забот.
 
Alexey Viktorov:

Я не советую использовать эту функцию потому, что она работает в MQL5 совсем не так как в MQL4. Следовательно возможны трудности с пониманием при переходе на язык MQL5

Спасибо за ценную информацию

 
Alekseu Fedotov:

С помощью жёлтых плюсиков вы сформировываете строку (текст), которую выводите с помощью   Print();

Тоже самое вы можете сделать с помощью функции     StringConcatenate()

Спасибо за новую для меня информацию

 
ANDREY:

Спасибо за ценную информацию

Я дополнил своё сообщение поспешно написанное.

И уже всем понятно на сколько вы благодарны каждому кто что-то объясняет вам. Не растягивайте тему отдельными сообщениями…

 
Alexey Viktorov:

Дальше: Имеем несколько строк

  1. i типа int которое привели явно к типу string (пусть будет 0)
  2. ": "
  3. eArray[i] приведённое к типу string посредством функции DoubleToString (пусть будет 1.6251)
  4. ", "




А почему   1.6251 нельзя привести к типу  string так же явно как и  i? Это короче и экономит ресурсы вычислительные..... как мне кажется.

Спасибо за объяснение

 
Alexey Viktorov:

Я дополнил своё сообщение поспешно написанное.

И уже всем понятно на сколько вы благодарны каждому кто что-то объясняет вам. Не растягивайте тему отдельными сообщениями…

Ок. Тогда благодарность за каждый Ваш ответ будет подразумеваться по умолчанию( будет храниться в переменной :):):) ).... если Вы не возражаете.