Fórum Passagem de Parâmetro #422503
25/08/2012
0
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
Curtir tópico
+ 0Posts
25/08/2012
William
[url]https://www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303[/url]
Gostei + 0
25/08/2012
Joel Rodrigues
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
25/08/2012
Marco Salles
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
29/08/2012
Gustavo Fernandes
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)