Pergunta datilografada - página 6

 
Até onde me lembro, C# não é um bom amigo do mql
 
Ilya Malev:
Até onde me lembro, C# não é bom amigo do mql

https://www.mql5.com/ru/forum/285631

10. MQL5: Adicionado suporte nativo para bibliotecas .NET com função de importação "inteligente". Agora você pode usar bibliotecas .NET sem escrever embalagens especiais - MetaEditor se encarrega disso.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Não ligar para escrever em C#. Apenas que os benefícios da conversão implícita são questionáveis (imho, açúcar, não mais), ela não aumenta a rentabilidade das estratégias. Se alguém puder explicar por que isso ajuda tanto ao codificar estratégias, eu ficaria feliz em aprender algo novo.
 
Vasiliy Sokolov:
Isso não aumenta a rentabilidade das estratégias.

Referir-se à rentabilidade das estratégias ao discutir técnicas de programação é bastante deprimente.

Vasiliy Sokolov:
Se alguém puder explicar por que isso ajuda tanto na codificação - eu ficarei feliz em aprender algo novo.

Você não pode nem mesmo fazer sua própria matriz multidimensional corretamente. Muito menos uma matriz com diferentes tipos de valores. Você não pode nem mesmo fazê-lo com apenas um, porque tal código não caberia no mql:

  Array array;

  double d=123.456;

  array[5]=d;

  d=array[5];

É claro, você pode escrever d=array[5].to_double(), fingir que deve ser assim e ficar feliz com seu código feio. Mas se a sobrecarga de operações de conversão de tipo fosse permitida, quase ninguém preferiria esta forma de escrever d=arranjo[5].

 
Ilya Malev:

...

é claro que você pode escrever d=array[5].to_double(), fingir que isto está correto e ficar feliz com seu código de buggy. Mas se a sobrecarga de operações de conversão de tipo fosse permitida, quase ninguém preferiria esta forma de escrever d=arranjo[5].

Simples. d=array[5] poderia:

template <typename T>
class MainArray
{
private:
   T m_items[];
   int m_curr;
public:
   MainArray()
   {
      ArrayResize(m_items, 16);
      m_curr = 0;
   }
   void Add(T item)
   {
      m_items[m_curr++] = item;
   }
   T operator[](int index)
   {
      return m_items[index];
   }
};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   MainArray<double> array;
   array.Add(123.456);
   double v = array[0];
   printf((string)v);
}

Se você ficar nerd, ainda há dificuldades com o array[3] = 4,00123; mas é legível e fino como é.

 
Vasiliy Sokolov:

Certo. d=array[5] está bem:

Se você ficar entediante, então há dificuldades com o array[3] = 4,00123; Mas é legível e bom o suficiente.

Sim, d=array[5] está ok. mas então você não pode fazer array[5]=d. Mas você pode fazer %= ao invés de =. sem problema, ao mesmo tempo o ícone nos lembrará o lugar por onde tudo é feito))

 
Ilya Malev:

Sim, d=array[5] pode. mas então você não pode fazer array[5]=d. Mas você pode fazer %= ao invés de =. Sem problema, e o ícone lembrará qual o lugar a ser utilizado))

Se você realmente quer fazer isso, você pode fazer assim

#property strict

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

#define  PRINT(A) ::Print(#A + " = " + (string)(A));

void OnStart( void )
{
// Работа со стандартными типами
  color Color = C'241,248,255';

  PRINT(_R(Color)[(uchar)1])             // Green-составляющая цвета - 248

  _W(Color)[2] = (uchar)230;             // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'

// Работа со строками
  string Str = "abcd";

  _W(Str)[2] = "98765";                  // Побайтовая запись строки в строку со смещением 2
  PRINT(Str)

  string StrArray[] = {"123", "45", "6789"};
  _W(Str) = StrArray;                    // Записали в строку строковый массив
  PRINT(Str)

  _W(Str)[3] = (uchar)0;                 // В байт со смещением 3 записали ноль, тем самым отбрезав строку (длина - 3 ANSI-символа (4 байта))
  PRINT(Str);
}

etc.

 
pavlick_:

No início eu também era crítico, mas depois pensei - eu mesmo encontraria um uso para isso:

Pedi um operador de parênteses e um operador de uva quente cerca de três ou quatro anos atrás.

você pergunta, talvez você possa fazer melhor.

 
É uma pena que você não possa acrescentar vantagens aos seus postos).
 
Ilya Malev:

...

é claro que você pode escrever d=array[5].to_double(), fingir que é assim que deve ser e ficar feliz com seu código de buggy. Mas se a sobrecarga de operações de conversão de tipo fosse permitida, quase ninguém preferiria esta forma de escrever d=arranjo[5].

Que problemas as pessoas têm)))) Oh, abençoada seja a minha vida!

A propósito, escreverd=array[5].to_double() é muito mais fácil do qued=(double)array[5] Basta pressionar um ponto. Mas não estamos à procura de maneiras fáceis...

Razão: