Cuestión de mecanografía - página 6

 
Que yo recuerde, C# no es un buen amigo de mql
 
Ilya Malev:
Que yo recuerde, C# no es buen amigo de mql

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

10. MQL5: Se ha añadido soporte nativo para bibliotecas .NET con importación de funciones "inteligentes". Ahora puede utilizar las bibliotecas .NET sin tener que escribir envoltorios especiales: MetaEditor se encarga de ello.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
No llamar para escribir en C#. Sólo que los beneficios de la conversión implícita son cuestionables (imho, azúcar, no más), no aumenta la rentabilidad de las estrategias. Si alguien puede explicar por qué ayuda tanto a la hora de codificar estrategias, estaré encantado de aprender algo nuevo.
 
Vasiliy Sokolov:
No aumenta la rentabilidad de las estrategias.

Referirse a la rentabilidad de las estrategias al hablar de técnicas de programación es bastante deprimente.

Vasiliy Sokolov:
Si alguien puede explicar por qué ayuda tanto en la codificación, estaré encantado de aprender algo nuevo.

Ni siquiera puedes hacer tu propio array multidimensional correctamente. Y mucho menos un array con diferentes tipos de valores. Ni siquiera se puede hacer con uno solo, porque ese código no cabría en mql:

  Array array;

  double d=123.456;

  array[5]=d;

  d=array[5];

Por supuesto, puedes escribir d=array[5].to_double(), pretender que sea así y estar contento con tu feo código. Pero si se permitiera la sobrecarga de las operaciones de conversión de tipos, casi nadie preferiría escribir d=array[5] de esta manera.

 
Ilya Malev:

...

Por supuesto, puedes escribir d=array[5].to_double(), fingir que esto es correcto y estar contento con tu código de errores. Pero si se permitiera la sobrecarga de las operaciones de conversión de tipos, casi nadie preferiría esta forma de escribir d=array[5].

Es sencillo. d=array[5] podría:

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);
}

Si te pones friki, todavía hay dificultades con array[3] = 4,00123; Pero es legible y está bien así.

 
Vasiliy Sokolov:

Sí. d=array[5] es posible:

Si te aburres, entonces hay dificultades con array[3] = 4.00123; Pero es legible y suficientemente bueno como es.

Sí, d=array[5] está bien. pero entonces no puedes hacer array[5]=d. Pero puedes hacer %= en lugar de =. no hay problema, al mismo tiempo el icono nos recordará por qué lugar se hace todo))

 
Ilya Malev:

Sí, d=array[5] puede. pero entonces no puedes hacer array[5]=d. Pero puedes hacer %= en lugar de =. No hay problema, y el icono te recordará qué lugar usar))

Si realmente quieres hacerlo, puedes hacerlo así

#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_:

Yo también fui crítico al principio, pero luego pensé que podría usarlo yo mismo:

Hace unos tres o cuatro años pedí un operador de paréntesis y un operador de grapas.

que pides, tal vez puedas hacerlo mejor.

 
Es una pena que no puedas añadir pluses a tus mensajes).
 
Ilya Malev:

...

Por supuesto, puedes escribir d=array[5].to_double(), fingir que así es como debe ser y estar contento con tu código de errores. Pero si se permitiera la sobrecarga de las operaciones de conversión de tipos, casi nadie preferiría esta forma de escribir d=array[5].

Qué problemas tiene la gente))) ¡Oh, bendita sea mi vida!

Por cierto, escribird=array[5].to_double() es mucho más fácil qued=(double)array[5] Sólo hay que pulsar un punto. Pero no buscamos formas fáciles...