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

 
cameofx:

O que está faltando na explicação do irusoh1 é a variável necessidade de ser Array(s) [...]

O irusoh1 está certo: a variável não precisa ser um array. Por exemplo:

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:

Preciso devolver 2 resultados de uma função.

Se os dois (ou mais) resultados forem atribuídos a variáveis, basta declará-los como globais e atribuir valores a eles na função.
 
engcomp:
Se os dois (ou mais) resultados forem atribuídos a variáveis, basta declará-los como globais e atribuir valores a eles na função.
É considerada uma boa prática de programação para minimizar o número de variáveis globais. É melhor passar algumas variáveis por referência (se mais de uma variável precisar ser devolvida) do que declará-las em um escopo global.
 
gordon:
É considerada uma boa prática de programação para minimizar o número de variáveis globais. É melhor passar algumas variáveis por referência (se mais de uma variável precisar ser devolvida) do que declará-las em um escopo global.
Obrigado, Gordon, eu não sabia disso.
 
jjc:

irusoh1 está certo: a variável não precisa ser uma matriz. Por exemplo:

Minha fraseologia e conceito está incorreta ao responder ao tópico então. Ainda assim, vejo que o propósito de passar por referência é em essência a maneira prática de manipular Array(s) por função.

O uso de parâmetro passado como função de referência em variáveis tem apenas a praticidade de modificar X número de variável(s), mais uma variável com retorno

Ao utilizá-lo para o Array permite modificar o número X de Arrays nos parênteses vezes Y de cada tamanho de Array.

 

Arrays ae sempre passado por referência. O problema com as arrays MQL é que elas não podem ser alteradas dentro da função (como o redimensionamento) somente seus membros podem.

Não faz sentido, e limita o escopo da manipulação de matrizes.

Talvez isto tenha sido consertado na MQL5?

 
irusoh1:

[...] O problema com as arrays MQL é que elas não podem ser alteradas dentro da função (como o redimensionamento) somente seus membros podem.

Você pode redimensionar um array passado por referência a uma função de dentro da função. O que você quer dizer com isso?
 
[...] O problema com as matrizes MQL é que elas não podem ser alteradas dentro da função (como o redimensionamento) only their members can.

@ irusoh1 : Você quer dizer tornar os parâmetros da função dinâmicos ? Eu também não entendo.

@ Gordon : Você sabe por que eles dizem 'os parâmetros são passados por valor'. Os arrays só podem ser passados por referência". Sei como isso aconteceria no código, mas não entendo o raciocínio. Por exemplo, há alguma ocorrência em outro idioma onde este não é o caso? ou seja, os arrays são passados por valor ou algo assim. Eu não saberia qual seria o oposto dessa regra,,

 

cameofx:

@ Gordon : Você sabe por que eles dizem "os parâmetros são passados por valor". As arrays só podem ser passadas por referência". Sei como isso aconteceria em código, mas não entendo o raciocínio. Por exemplo, há alguma ocorrência em outro idioma onde este não é o caso? ou seja, os arrays são passados por valor ou algo assim. Eu não saberia qual seria o oposto dessa regra,,

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

Olá a todos

Gordon disse: É considerada uma boa prática de programação minimizar o número de variáveis globais. É melhor passar algumas variáveis por referência (se mais de uma variável precisar ser devolvida) do que declará-las em um escopo global.

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?

obrigado

Philippe

Razão: