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

 
cameofx:

Lo que falta en la explicación de irusoh1 es que la variable tiene que ser Array(s) [...]

irusoh1 tiene razón: la variable no necesita ser un array. Por ejemplo:

int start()
{
   int returnvalue1, returnvalue2;
   returnvalue1 = Example(returnvalue2);
   MessageBox("Example 1: " + returnvalue1 + "\r\nExample 2: " + returnvalue2);
}

int Example(int & referenceparameter)
{
   referenceparameter = 2;
   return (1);
}
 
inkexit:

Necesito devolver 2 resultados de una función.

Si los dos (o más) resultados deben asignarse a variables, basta con declararlas como globales y asignarles valores en la función.
 
engcomp:
Si los dos (o más) resultados deben asignarse a variables, basta con declararlas como globales y asignarles valores en la función.
Se considera una buena práctica de programación minimizar el número de variables globales. Es mejor pasar algunas variables por referencia (si se necesita devolver más de una variable) que declararlas en un ámbito global.
 
gordon:
Se considera una buena práctica de programación minimizar el número de variables globales. Es mejor pasar algunas variables por referencia (si se necesita devolver más de una variable) que declararlas en un ámbito global.
Gracias, Gordon, no lo sabía.
 
jjc:

irusoh1 tiene razón: la variable no necesita ser un array. Por ejemplo:

Mi fraseo y concepto es incorrecto al responder el tema entonces. Aun así, veo que el propósito de pasar por referencia es en esencia la forma práctica de manipular Array(s) por función.

Usando el parámetro pasado como función de referencia en las variables sólo tiene la practicidad de modificar X número de variable(s), más una variable con retorno

Mientras que usarlo para Array permite modificar X número de Arrays en el paréntesis veces Y tamaños de cada Array.

 

Los arrays siempre se pasan por referencia. El problema con los arrays MQL es que no pueden ser cambiados dentro de la función (como el redimensionamiento), sólo sus miembros pueden.

No tiene sentido, y limita el alcance de la manipulación de arrays.

Tal vez esto fue fixied en MQL5?

 
irusoh1:

[...] El problema con las matrices MQL es que no pueden ser modificadas dentro de la función (como el redimensionamiento) sólo sus miembros pueden hacerlo.

Puedes redimensionar un array pasado por referencia a una función desde dentro de la función... ¿Qué quieres decir?
 
[...] El problema con las matrices MQL es que no se pueden cambiar dentro de la función (como el redimensionamiento) only their members can.

@ irusoh1 : ¿Te refieres a hacer dinámicos los parámetros de la función ? Yo tampoco lo entiendo.

@ Gordon : ¿Sabes por qué dicen que 'los parámetros se pasan por valor. Los arrays sólo se pueden pasar por referencia'. Sé cómo se traduciría eso en el código pero no entiendo el razonamiento. Por ejemplo, ¿hay algún caso en otro lenguaje en el que esto no sea así? es decir, los arrays se pasan por valor o algo así. No sabría decir cuál sería la regla contraria,,,

 

cameofx:

@ Gordon : ¿Sabes por qué dicen que 'los parámetros se pasan por valor. Los arrays sólo se pueden pasar por referencia'. Sé cómo se transmite en el código, pero no entiendo el razonamiento. Por ejemplo, ¿hay algún caso en otro lenguaje en el que esto no sea así? es decir, los arrays se pasan por valor o algo así. No sabría decir cuál sería la regla contraria,,,

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

Hola a todos

Gordon dijo : Se considera una buena práctica de programación minimizar el número de variables globales. Es mejor pasar algunas variables por referencia (si se necesita devolver más de una variable) que declararlas en un ámbito global.

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

gracias

Philippe