Passagem de Parâmetro
Boa tarde pessoal,
Alguém poderia me explicar a diferença entre passagem de parâmetro
por valor e referência. Se puderem expor algum exemplo para que eu,
possa ter uma melhor compreensão.
Desde já agradeço.
Alguém poderia me explicar a diferença entre passagem de parâmetro
por valor e referência. Se puderem expor algum exemplo para que eu,
possa ter uma melhor compreensão.
Desde já agradeço.
Gustavo Fernandes
Curtidas 0
Respostas
William
25/08/2012
Colega postei um artigo explicando essas diferenças, segue link:
[url]https://www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303[/url]
[url]https://www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303[/url]
GOSTEI 0
Joel Rodrigues
25/08/2012
Olá, Gus.
Suponha um método que receba um valor e some uma unidade. Você pode, por exemplo, chamar o método passando um valor inteiro direto: Somar(10), mas pode também chamá-lo passando uma variável do seu código Sumar(valor).
Na segunda forma, você pode passar a variável "valor" como parâmetro, mas ao final do método, verá que a variável original não foi alterada. Essa variável foi passada POR VALOR. Vamos às definições conceituais:
Passagem POR VALOR:
a variável original não é alterada. O método que a recebe faz uma cópia da original e passa a trabalhar com a cópia.
Passagem POR REFERENCIA:
a variável original é manipulada pelo método, não uma cópia dela. Ao final da execução do método, a variável passada está alterada.
Exemplos:
Declaração de método com parâmetro por valor
Declaração de método com parâmetro por referência
Ao chamar o método, teríamos o seguinte:
Bom, a ideia é essa. Não sei se fui claro o bastante, mas caso as dúvidas persistam, fique à vontade para postar.
Abraço.
Suponha um método que receba um valor e some uma unidade. Você pode, por exemplo, chamar o método passando um valor inteiro direto: Somar(10), mas pode também chamá-lo passando uma variável do seu código Sumar(valor).
Na segunda forma, você pode passar a variável "valor" como parâmetro, mas ao final do método, verá que a variável original não foi alterada. Essa variável foi passada POR VALOR. Vamos às definições conceituais:
Passagem POR VALOR:
a variável original não é alterada. O método que a recebe faz uma cópia da original e passa a trabalhar com a cópia.
Passagem POR REFERENCIA:
a variável original é manipulada pelo método, não uma cópia dela. Ao final da execução do método, a variável passada está alterada.
Exemplos:
Declaração de método com parâmetro por valor
procedure Somar(valor : integer) begin valor := valor + 1;//a variável passada não é alterada nesse ponto ShowMessage(IntToStr(valor)); end;
Declaração de método com parâmetro por referência
procedure Somar(var valor : integer) begin valor := valor + 1;//a variável passada é alterada nesse ponto ShowMessage(IntToStr(valor)); end;
Ao chamar o método, teríamos o seguinte:
var numero : integer; begin numero := 1; Somar(numero); //após isso, a variável número continua com o valor 1
var numero : integer; begin numero := 1; Somar(var numero); //após isso, a variável número contém o valor 2, pois foi alterada no método
Bom, a ideia é essa. Não sei se fui claro o bastante, mas caso as dúvidas persistam, fique à vontade para postar.
Abraço.
GOSTEI 0
Marco Salles
25/08/2012
então o própri nome ja diz
passagem parãmetro por valor .. Vc passa o valor e nada ocorre com seu parãmetro
passagem parâmetro por referencia .. Vc passa a referencia e tudo que ocorrer afetará a variavel
O que confunde as vezes que o parâmetro var precede a passagem por Referencia e não por Valor
veja o exemplo
Ao chamar esta procedure veja o que acontece com a passagem do parâmetro por valor
Agora veja o mesmo exemplo utilizando a passagem por Referencia
Ao chamar esta procedure veja o que acontece com a passagem do parâmetro por valor
dois adendos
1) quando se utiliza um quando se utiliza outro. Depende da sua necessiada
2) Todos os objetos em Delphi mesmo que vc não utiliza a diretriz VAR são passados por Referencia
Assim se vc tiver
veja que não tem a Diretriz VAR , mas ao fazer
o Novo valor do caption do Objeto Button1 agora é Alterar
espero que tenha entendido a Biblia
[]sds
passagem parãmetro por valor .. Vc passa o valor e nada ocorre com seu parãmetro
passagem parâmetro por referencia .. Vc passa a referencia e tudo que ocorrer afetará a variavel
O que confunde as vezes que o parâmetro var precede a passagem por Referencia e não por Valor
veja o exemplo
procedure Acrescentar(a:integer); // passagem por valor begin a:=a+5; showmessage(inttostr(a)); end;
Ao chamar esta procedure veja o que acontece com a passagem do parâmetro por valor
var
b:integer
begin
b:=5; // variavel b recebe o valor de 5
Acrescentar(b); chamo a procedure me mostra a mensagem de 10;
showmessage('O Valor de b continua sendo ='+inttostr(b)); //continua sendo 5 pois passou-se por Valor
end;Agora veja o mesmo exemplo utilizando a passagem por Referencia
procedure Acrescentar(var a:integer); // passagem por referencia . Perceba Diretriz VAR precedendo var a:integer begin a:=a+5; showmessage(inttostr(a)); end;
Ao chamar esta procedure veja o que acontece com a passagem do parâmetro por valor
var
b:integer
begin
b:=5; // variavel b recebe o valor de 5
Acrescentar(b); chamo a procedure me mostra a mensagem de 10;
showmessage('O Valor de b Agora é ='+inttostr(b)); //Veja que o Valor de B foi alterado
end;dois adendos
1) quando se utiliza um quando se utiliza outro. Depende da sua necessiada
2) Todos os objetos em Delphi mesmo que vc não utiliza a diretriz VAR são passados por Referencia
Assim se vc tiver
procedure MudarCaption (butto:Tbutton); begin button.caprion:='Alterar'; end;
veja que não tem a Diretriz VAR , mas ao fazer
MudarCaptio(button1);
o Novo valor do caption do Objeto Button1 agora é Alterar
espero que tenha entendido a Biblia
[]sds
GOSTEI 0
Gustavo Fernandes
25/08/2012
Obrigado pessoal estão me ajudando muito.
GOSTEI 0