Diskussion zum Artikel "LifeHack für Händler: ForEach mit #define zubereiten" - Seite 3

 
fxsaber:

Es ist mangelhaft (schade um die Strukturen) und nicht optimal.

Wenn wir es mit einem Fehler machen, dann ist es meiner Meinung nach genau andersherum. Es ist auch fehlerhaft, auch suboptimal, aber ich finde es bequemer.

#define  ForEach(type, element, array)                             \
for (int __i = 0, __max = ArraySize((array)); __i < __max; __i++) \
{                                                                 \
type element = array[__i];                                        \

void OnStart()
{
   string array[] = {"12", "23", "34", "45"};
   
   ForEach(string, item, array)
      Print(item);
   }
}
 
Комбинатор:

Wenn man es schon mit einem Fehler macht, dann sollte es umgekehrt sein. Auch fehlerhaft, auch suboptimal, aber ich finde es bequemer.

Ja, mit dem Typ scheint es keinen Ausweg zu geben. Der Weg, um aus dem vorherigen mit der Struktur herauszukommen, ist dieser.

template <typename T>
bool Assign( const T &Value1, T &Value2 )
{
  Value2 = Value1;
  
  return(true);
}

#define  forEach(element, array)  for (int __i = 0, __max = ArraySize((array)); __i < __max && Assign(array[__i], element); __i++)

Eine Unvollständigkeit, kurz gesagt. Zumal forEach nur zum Lesen des Arrays ist, ohne es zu schreiben.

 

tUT sieht aus wie Arbeit um der Arbeit willen.... :-)

Goldene Worte:

"Ich selbst betrachte die in diesem Artikel beschriebenen Techniken als Lifehack und bleibe ein Anhänger des klassischen MQL5-Ansatzes. Vielleicht helfen diese Artikel denjenigen, die es gewohnt sind, im MQL4-Stil zu schreiben, die psychologische Barriere zu überwinden, wenn sie zur MetaTrader 5-Plattform wechseln, die in jeder Hinsicht viel bequemer ist."

 
Roman Shiredchenko:

tUT sieht aus wie Arbeit um der Arbeit willen.... :-)

Goldene Worte:

"Ich selbst betrachte die in diesem Artikel beschriebenen Techniken als Lifehack und bleibe ein Anhänger des klassischen MQL5-Ansatzes. Vielleicht helfen diese Artikel denjenigen, die es gewohnt sind, im MQL4-Stil zu schreiben, die psychologische Barriere zu überwinden, wenn sie zur MetaTrader 5-Plattform wechseln, die in allen Parametern viel bequemer ist."

Ich bin sicher, dass es normal ist, wenn es Leute gibt, die bereit sind, dreimal mehr Code zu schreiben, um das gleiche Ergebnis zu erzielen.

 
Um das forEach zu beenden, müssen Sie ## im Makro verwenden, um verschachtelte forEach verwenden zu können.
[Gelöscht]  
Комбинатор:

Wenn man es schon mit einem Fehler macht, dann sollte es umgekehrt sein. Auch fehlerhaft, auch suboptimal, aber ich finde es bequemer.

Sie haben eine der Schwächen von Makros aufgezeigt.

Man kann eine Klammer einfügen, aber man muss daran denken, die zweite Klammer nach außen zu setzen.

Tun Sie das nie!

 
Koldun Zloy:

Sie haben einen der Nachteile von Makros aufgezeigt.

Oh, für mich ist es besser als Makro-Variablen im aktuellen Kontext.

Ich habe Ihnen direkt gesagt, dass es keine gute Version gibt und unter den derzeitigen Gegebenheiten auch nicht geben kann.

 
Комбинатор:

Oh, das klingt für mich besser als die Makro-Variablen im aktuellen Kontext.

Ich habe Ihnen direkt gesagt, dass es keine gute Version gibt und unter den derzeitigen Gegebenheiten auch nicht geben kann.

Ich denke, dies ist eine gute Version

#define  ForEach(Index, array) for (int Index = 0, max##Index = ArraySize((array)); Index < max##Index;  Index++) 

void OnStart()
{
  string array[] = {"12", "23", "34", "45"};
  
  ForEach(i, array)
  {
   Print(array[i]);
   
   ForEach(j, array)
     Print(array[j]);
  }    
}
 
fxsaber:

Ich denke, es ist eine gute Version

Ja, das ist sie.
 
fxsaber:

Ich denke, es ist eine gute Version

Das verschachtelte ForEach soll zeigen, dass es keine Kollisionen gibt. Richtig?