- Llamada a una función
- Traspaso de parámetros
- Sobrecarga de funciones
- Sobrecarga de operaciones
- Descripción de funciones externas
- Exportación de funciones
- Funciones de procesamiento de eventos
Traspaso de parámetros
Existen dos métodos mediante los cuales el lenguaje de programación puede pasar el argumento al subprograma (función). El primer modo consiste en traspasar los parámetros por valor. Este método copia el valor del argumento en el parámetro formal de la función. Por tanto, cualquieras que sean las modificaciones de este parámetro dentro de la función, no tendrán ninguna influencia sobre el correspondiente argumento de llamada.
//+------------------------------------------------------------------+
|
El segundo modo es el traspaso de parámetros por referencia. En este caso la referencia al parámetro (y no su valor) se pasa al parámetro de la función. Se usa dentro de la función para dirigirse al parámetro actual indicado en la llamada. Esto significa que las modificaciones del parámetro van a influir sobre el argumento utilizado para invocar la función.
//+------------------------------------------------------------------+
|
MQL5 utiliza los dos métodos, salvo una excepción: los arrays, variables del tipo de estructuras y objetos de clases siempre se traspasan por referencia. Para excluir los cambios de los parámetros actuales (argumentos pasados al invocar una función) es necesario usar el especificador de acceso const. Cuando se intenta cambiar el contenido de la variable que ha sido declarada con el especificador const, el compilador mostrará un error.
Nota
Hay que recordar que los parámetros se traspasan a una función del revés, es decir, al principio se calcula y se pasa el último parámetro, luego el penúltimo, etc. En último lugar se calcula y se pasa el parámetro que está primero después de las llaves.
Ejemplo:
void OnStart()
|
Durante la primera llamada en el ejemplo mencionado, al principio la variable i toma parte en la concatenación de cadenas de caracteres
"La primera llamada(i = "+string(i)+")" |
además allí su valor no se cambia. Luego la variable i toma parte en el calculo del elemento del array a[i++], es decir, después de tomar el elemento i del array, la variable i se incrementa. Y sólo después de eso se calcula el primer parámetro con el valor cambiado de la variable i.
En la segunda llamada durante el cálculo de todos los tres parámetros, se usa el mismo valor de i que ha sido cambiado durante la primera invocación de la función, y sólo una vez calculado el primer parámetro, la variable i vuelve a cambiarse.
Véase también
Visibilidad y tiempo de vida de variables, Sobrecarga, Funciones virtuales, Polimorfismo