Função que retorna 2 resultados? - página 3

 
gordon:
Aqui está uma explicação simplificada -> https://www.mql5.com/en/forum/117210. Os arrays são sempre passados por referência na MQL4.

Sim, obrigado. Mas, como eu perguntei, isso implica que em outra língua não é? Se fosse a única forma de fazê-lo usar o MQ/MT4 ou outra linguagem construída, suponho que eles não teriam que se incomodar em declará-lo.

Acho que estou perguntando os 'detalhes técnicos', como você disse naquele post. Só por curiosidade, não por necessidade.

Quanto à sintaxe, a linguagem MQL5 para programação de estratégias comerciais é muito semelhante à linguagem de programação C++, exceto por algumas características:

  • sem aritmética de endereço;
  • sem operador de goto;
  • uma enumeração anônima não pode ser declarada;
  • os construtores de classes e estruturas não podem ter parâmetros;
  • nenhuma herança múltipla.

Assim, posso implicar que em C++ o oposto será verdadeiro. Obrigado de qualquer forma, Gordon.

 
Matutin:

Sinto muito, mas não é uma resposta "técnica" :) Você poderia dizer por que é melhor passar variável por referência ao invés de variável global?

Muitas razões que prefiro não repetir, em vez disso, vou consultar aqui -> https://en.wikipedia.org/wiki/Global_variable e aqui -> http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (você pode pesquisar no Google para mais... É um conceito amplamente aceito e há muita informação na rede).

 
cameofx:

[...] isso implica que em outro idioma não é? [...]

Não implica nada, mas especificamente em ambas as matrizes C e C++ são passadas por referência também (tecnicamente um ponteiro para o primeiro elemento da matriz é passado, esse ponteiro é passado por valor).
 
gordon:

Muitas razões que eu prefiro não repetir, em vez disso, eu vou referir-se a você aqui -> https://en.wikipedia.org/wiki/Global_variable e aqui -> https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (você pode pesquisar no Google para mais... É um conceito amplamente aceito e há muita informação na rede).


Muito interessante! Infelizmente, a EA precisa de parâmetros, e às vezes muito, então não podemos evitá-los e temos que tomar cuidado por todos os motivos mencionados em https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad.

Estou usando regras de nomenclatura para a GlobalVariable : Muito mais fácil de gerenciar e evitar alguns bugs.

Obrigado Gordon.

 
Matutin:

Muito interessante ! Infelizmente, a EA precisa de parâmetros, e às vezes muito, portanto não podemos evitá-los [...]

As extensões são de fato inevitáveis. Embora sejam globais no escopo, não são as mesmas variáveis globais (não confundir com os GV's); especificamente - não é recomendado alterar seu valor via código, portanto não devem ser usados para passar informações entre funções de qualquer forma (veja aqui -> https://www.mql5.com/en/forum/123535).


Estou usando regras de nomenclatura para GlobalVariable : Muito mais fácil de gerenciar e evitar alguns bugs.

Esta discussão é sobre variáveis definidas no escopo global (declaradas fora da função especial start(), init(), deinit()) e não sobre GV's... Não misture as duas.
 

Apenas curous: existe QUALQUER linguagem de programação que tenha funções que retornem resultados múltiplos?

 

talvez você possa, de certa forma, enganar uma função para retornar dois valores, combinando-os de forma que você possa descombiná-los novamente na função de chamada

algo como isto

a = 10;

b = 20;

a = a*1000

c = a+b // 10020

retorno(c);

então na função de chamada

b = c%1000 // 20

a = c-b/1000 // 10

 
SDC:

talvez você possa, de certa forma, enganar uma função para retornar dois valores, combinando-os de forma que você possa descombiná-los novamente na função de chamada

algo como isto

[...]
Talvez não.
 

por que não?

 
SDC:

por que não?

Por que resolver um problema que não existe? Por que reinventar a roda? Por que inventar um código pouco claro que só funcionaria em casos limitados?