Question sur la dactylographie - page 6

 
Autant que je me souvienne, C# n'est pas un bon ami de mql.
 
Ilya Malev:
Autant que je me souvienne, C# n'est pas un bon ami de mql.

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

10. MQL5 : Ajout d'un support natif pour les bibliothèques .NET avec importation de fonctions "intelligentes". Vous pouvez désormais utiliser les bibliothèques .NET sans avoir à écrire de wrappers spéciaux - MetaEditor s'en charge.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Ne pas appeler pour écrire en C#. Juste que les bénéfices de la conversion implicite sont discutables (imho, le sucre, pas plus), elle n'augmente pas la rentabilité des stratégies. Si quelqu'un peut expliquer pourquoi cela aide tant à coder des stratégies, je serais heureux d'apprendre quelque chose de nouveau.
 
Vasiliy Sokolov:
Elle n'augmente pas la rentabilité des stratégies.

Se référer à la rentabilité des stratégies lorsqu'on discute des techniques de programmation est plutôt déprimant.

Vasiliy Sokolov:
Si quelqu'un peut expliquer pourquoi cela aide tant à coder, je serai heureux d'apprendre quelque chose de nouveau.

Tu ne peux même pas créer ton propre tableau multidimensionnel correctement. Et encore moins un tableau avec différents types de valeurs. Vous ne pouvez même pas le faire avec un seul, car un tel code ne tiendrait pas dans mql :

  Array array;

  double d=123.456;

  array[5]=d;

  d=array[5];

Bien sûr, vous pouvez écrire d=array[5].to_double(), prétendre qu'il en est ainsi et être heureux de votre code moche. Mais si la surcharge des opérations de conversion de type était autorisée, personne ne préférerait cette façon d'écrire d=array[5].

 
Ilya Malev:

...

Bien sûr, vous pouvez écrire d=array[5].to_double(), prétendre que c'est correct et être heureux de votre code bogué. Mais si la surcharge des opérations de conversion de type était autorisée, personne ne préférerait cette façon d'écrire d=array[5].

C'est simple. d=tableau[5] pourrait :

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 l'on est un peu plus nerd, il y a encore des difficultés avec array[3] = 4.00123 ; mais c'est lisible et bien comme ça.

 
Vasiliy Sokolov:

Bien. d=array[5] est bien :

Si vous vous ennuyez, alors il y a des difficultés avec array[3] = 4.00123 ; Mais c'est lisible et assez bon comme ça.

Yep, d=array[5] est ok. mais alors vous ne pouvez pas faire array[5]=d. Mais vous pouvez faire %= au lieu de =. Pas de problème, en même temps l'icône nous rappellera par quel endroit tout est fait ;))

 
Ilya Malev:

Oui, d=array[5] le peut. Mais alors vous ne pouvez pas faire array[5]=d. Mais vous pouvez faire %= au lieu de =. Pas de problème, et l'icône vous rappellera l'endroit à utiliser ;))

Si vous voulez vraiment le faire, vous pouvez le faire comme ceci

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

J'étais moi aussi critique au début, mais ensuite je me suis dit que je trouverais moi-même une utilité à ce produit :

J'ai demandé un opérateur de parenthèse et un opérateur de mitraille il y a trois ou quatre ans.

vous demandez, peut-être que vous pouvez faire mieux.

 
C'est dommage que tu ne puisses pas ajouter des plus à tes posts).
 
Ilya Malev:

...

Bien sûr, vous pouvez écrire d=array[5].to_double(), prétendre que c'est correct et être heureux de votre code bogué. Mais si la surcharge des opérations de conversion de type était autorisée, personne ne préférerait cette façon d'écrire d=array[5].

Quels problèmes ont les gens))) Oh, bénissez ma vie !

À propos, écrired=array[5].to_double() est beaucoup plus facile qued=(double)array[5] Il suffit d'appuyer sur un point. Mais nous ne cherchons pas de moyens faciles...