¿Función que devuelve 2 resultados? - página 3

 
gordon:
Aquí hay una explicación simplificada -> https://www.mql5.com/en/forum/117210. Los arrays se pasan siempre por referencia en MQL4.

Sí, gracias. Pero como pregunté, ¿eso implica que en otro lenguaje no lo es? Si fuera la única forma de llevarlo a cabo usando MQ/MT4 u otro constructo de lenguaje entonces asumo que no tendrían que molestarse en declararlo.

Supongo que estoy preguntando los "detalles técnicos" como dijiste en ese post. Sólo por curiosidad, no por necesidad.

En cuanto a la sintaxis, EL lenguaje MQL5 para programar estrategias de trading es muy similar al lenguaje de programación C++, excepto por algunas características

  • no hay aritmética de direcciones;
  • no hay operador goto;
  • no se puede declarar una enumeración anónima
  • los constructores de clases y estructuras no pueden tener parámetros;
  • no hay herencia múltiple.

Así, puedo dar a entender que en C++ ocurrirá lo contrario... Gracias de todos modos, Gordon.

 
Matutin:

Lo siento, pero no es una respuesta "técnica" :) ¿Podría decir por qué es mejor pasar una variable por referencia en lugar de una variable global?

Muchas razones que prefiero no repetir, en lugar de eso te remitiré a aquí -> https://en.wikipedia.org/wiki/Global_variable y aquí -> http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (puedes buscar en Google para más... Es un concepto ampliamente aceptado y hay mucha información en la red).

 
cameofx:

[...] ¿implica eso que en otro idioma no lo es? [...]

No implica nada, pero concretamente tanto en C como en C++ los arrays se pasan por referencia también (técnicamente se pasa un puntero al primer elemento del array, ese puntero se pasa por valor).
 
gordon:

Muchas razones que prefiero no repetir, en su lugar voy a referirme a aquí -> https://en.wikipedia.org/wiki/Global_variable y aquí -> https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (puedes buscar en Google para más... Es un concepto ampliamente aceptado y hay mucha información en la red).


¡Muy interesante! Desafortunadamente, EA necesita parámetros, y a veces muchos, así que no podemos evitarlos y tenemos que tener cuidado por todas las razones mencionadas en https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

Estoy usando reglas de nomenclatura para GlobalVariable : Mucho más fácil de manejar y evitar algunos errores.

Gracias Gordon.

 
Matutin:

¡Muy interesante ! Desafortunadamente, los EA necesitan parámetros, y a veces muchos, así que no podemos evitarlos [...]

Las extensiones son, en efecto, inevitables. Aunque son de ámbito global, no son lo mismo que las variables globales (no confundir con las GV's); específicamente - no se recomienda cambiar su valor a través del código, por lo tanto no deben ser utilizadas para pasar información entre funciones de todos modos (ver aquí -> https://www.mql5.com/en/forum/123535).


Estoy usando reglas de nomenclatura para GlobalVariable : Mucho más fácil de manejar y evitar algunos errores.

Esta discusión es sobre las variables definidas en el ámbito global (declaradas fuera de la función especial start(), init(), deinit()) y no sobre las VG... No mezcles las dos cosas.
 

Sólo una pregunta: ¿hay algún lenguaje de programación que tenga funciones que devuelvan múltiples resultados?

 

tal vez se pueda engañar a una función para que devuelva dos valores combinándolos de manera que se puedan descombinar de nuevo en la función de llamada

algo así como

a = 10;

b = 20;

a = a*1000

c = a+b // 10020

return(c);

entonces en la función de llamada

b = c%1000 // 20

a = c-b/1000 // 10

 
SDC:

tal vez se pueda engañar a una función para que devuelva dos valores combinándolos de manera que se puedan descombinar de nuevo en la función de llamada

algo como esto

[...]
Tal vez no.
 

¿Por qué no?

 
SDC:

¿Por qué no?

¿Por qué resolver un problema que no existe? ¿Por qué reinventar la rueda? ¿Por qué inventar un código poco claro que sólo funcionaría en casos limitados?