- Chamada de Função
- Passando Parâmetros
- Sobrecarga de Função
- Sobrecarga de Operação
- Descrição de Funções Externas
- Exportação de Funções
- Funções de Manipulação de Evento
Passando Parâmetros
Existem pois métodos pelo qual a linguagem de máquina pode passar argumentos para um subprograma (função). O primeiro método é enviar um parâmetro por valor. Este método copia o valor do argumento para um parâmetro formal de função. Portanto, quaisquer mudanças neste parâmetro ocorridas dentro da função não têm influência no correspondente argumento usado na chamada da função.
//+------------------------------------------------------------------+
|
O segundo método é passar por referência. Neste caso, a referência para um parâmetro (não seu valor) é passada para um parâmetro de função. Dentro da função, ele é usado para referenciar o verdadeiro parâmetro especificado na chamada. Isso significa que mudanças no parâmetro afetarão o argumento usado na chamada da função.
//+------------------------------------------------------------------+
|
MQL5 usa ambos os métodos, com uma exceção, arrays, variáveis tipo estrutura e objetos de classe são sempre passados por referência. A fim de evitar modificações nos parâmetros reais (argumentos passados na chamada da função) use o especificador de acesso const. Ao se tentar modificar o conteúdo de uma variável declarada com o especificador const, o compilador gerará um erro.
Observação
Deve se notar que os parâmetros são passados para uma função em ordem inversa, ou seja, o último parâmetro é calculado e passado primeiro, depois o último mas apenas um, etc. O último parâmetro calculado e passado é aquele que está em primeiro lugar depois da abertura dos parênteses.
Exemplo:
void OnStart()
|
Na primeira chamada (ver exemplo acima) a variável i é usada pela primeira vez na concatenação de strings:
"Primeira chamada (i = "+string(i)+")" |
Aqui o valor não muda. Então a variável i é usada no cálculo do elemento do array a[i++], ou seja, quando o elemento do array com índice i é acessado, a variável i é incrementada. E só depois disso o primeiro parâmetro com valor alterado da variável i é calculado.
Na segunda chamada o mesmo valor de i (calculado sobre a primeira fase da função chamada) é utilizado no cálculo de todos os três parâmetros. Somente depois de os primeiros parâmetros serem calculados, a variável i é alterada novamente.
Também Veja
Escopo de visibilidade e tempo de vida das variáveis, Sobrecarga, Funções Virtuais, Polimorfismo