Discussão do artigo "LifeHack para traders: "amassando" ForEach com os define (#define)" - página 3

 
fxsaber:

Ele é falho (ruim para as estruturas) e não é ideal.

Se fizermos isso com uma falha, então é o contrário, no meu ponto de vista. Também é imperfeito, também não é ideal, mas acho mais conveniente.

#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);
   }
}
 
Комбинатор:

Se você vai fazer isso com uma falha, acho que deveria ser o contrário. Também com falhas, também abaixo do ideal, mas acho mais confortável.

Sim, parece não haver saída com o tipo. A maneira de sair do problema anterior com a estrutura é esta.

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++)

Uma incompletude, em resumo. Especialmente porque o forEach serve apenas para ler a matriz, sem escrevê-la.

 

O tUT parece ser um trabalho pelo trabalho.... :-)

Palavras de ouro:

"Eu mesmo considero as técnicas apresentadas no artigo como um lifehack e continuo sendo um seguidor da abordagem clássica MQL5. Talvez esses artigos ajudem aqueles que estão acostumados a escrever no estilo MQL4 a superar a barreira psicológica ao mudar para a plataforma MetaTrader 5, que é muito mais conveniente em todos os aspectos."

 
Roman Shiredchenko:

O tUT parece ser um trabalho pelo trabalho.... :-)

Palavras de ouro:

"Eu mesmo considero as técnicas apresentadas no artigo como um lifehack e continuo sendo um seguidor da abordagem clássica MQL5. Talvez esses artigos ajudem aqueles que estão acostumados a escrever no estilo MQL4 a superar a barreira psicológica ao mudar para a plataforma MetaTrader 5, que é muito mais conveniente em todos os parâmetros."

Tenho certeza de que é normal quando há pessoas que estão prontas para escrever três vezes mais código com o mesmo resultado.

 
Para finalizar o forEach, você precisa usar ## na macro para poder usar o forEach aninhado.
[Excluído]  
Комбинатор:

Se você vai fazer isso com uma falha, acho que deveria ser o contrário. Também com falhas, também abaixo do ideal, mas acho mais confortável.

Você demonstrou uma das falhas das macros.

Você pode colocar um colchete dentro dela, mas precisa se lembrar de colocar o segundo colchete fora.

Nunca faça isso!

 
Koldun Zloy:

Você demonstrou uma das desvantagens das macros.

Ah, para mim, é melhor do que macros de variáveis no contexto atual.

Eu lhe disse diretamente que não há uma boa versão e que, na realidade atual, não pode haver.

 
Комбинатор:

Ah, isso me parece melhor do que macros de variáveis no contexto atual.

Eu lhe disse diretamente que não há uma boa versão e que, na realidade atual, não pode haver.

Acho que esta é uma boa versão

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

Acho que é uma boa versão

Sim, é.
 
fxsaber:

Acho que é uma boa versão

O ForEach aninhado é para mostrar que não há colisões. Certo?