Parametro com var

Delphi

09/01/2007

[color=red:db1c5af95f]Título editado por Massuda Por favor, procure usar um título descritivo. No caso de reincidência, seus tópicos poderão vir a ser bloqueados. Leia as :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.[/color:db1c5af95f]

Bom dia amigos!

Estou postando essa dúvida mais por curiosidade do que por necessidade, acho que é uma coisa que eu já deveria saber, mas...

Qual a diferença de declara:

Procedure Teste(var teste: string);
Procedure Teste(teste: string);

Pode ser feito isso tabém:

function teste(var teste:string):string;
function teste(teste: string):string;

Eu já vi isso em algum lugar só não me lembro onde


Ruyoutor

Ruyoutor

Curtidas 0

Respostas

Ruyoutor

Ruyoutor

09/01/2007

Foi mau pelo titulo do assunto, eu não sabia que teria problema


GOSTEI 0
Massuda

Massuda

09/01/2007

Dê uma olhada :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=73443]neste tópico[/url] que reúne várias dúvidas, uma delas envolve [b:7a606b7a5e]passagem de parâmetros por valor e por referencia[/b:7a606b7a5e] que deve responder sua dúvida sobre o [b:7a606b7a5e]var[/b:7a606b7a5e].

Quanto ao título, procure usar algo descritivo, já que o fórum não ajudaria muito as pessoas se estivesse cheio de tópicos com títulos do tipo ´Dúvida´ ou ´Preciso de ajuda!´.


GOSTEI 0
Ruyoutor

Ruyoutor

09/01/2007

Mais uma vez.

Valeu Massuda!

Você é o cara


GOSTEI 0
Ruyoutor

Ruyoutor

09/01/2007

Massua, vê se entendi quan eu declaro assim:
procedure teste(var teste: string);
eu posso modificar o parâmetro dentro da procedure

e se eu declarar assim:
procedure teste(const teste:string);
eu não posso modificar o parâmetro dentro da procedure

i se eu declara assim:
procedure teste(teste:string);


GOSTEI 0
Massuda

Massuda

09/01/2007

procedure teste(const teste:string); eu não posso modificar o parâmetro dentro da procedure
OK, o parametro é constante/read-only.

procedure teste(var teste: string); eu posso modificar o parâmetro dentro da procedure ... i se eu declara assim: procedure teste(teste:string);
Nos dois casos, você pode modificar o parametro dentro da procedure. A diferença é que usando [b:8d55be088f]var[/b:8d55be088f] faz com que modificações feitas dentro da procedure sejam ´sentidas´ fora da procedure.

Como o [b:8d55be088f]var[/b:8d55be088f] faz com que a passagem de parametros seja por referencia, a string dentro da procedure é a mesma variável que você passou para a procedure. Se você modificar o parâmetro, você estará modificando a variável.

Sem o [b:8d55be088f]var[/b:8d55be088f] a passagem de parametros é por valor, de modo que é criada uma nova string para uso pela procedure com o mesmo conteúdo da variável que você passou para a procedure. Assim, se você modificar o parâmetro, você estará modificando a cópia, não tendo efeito sobre a variável.


GOSTEI 0
POSTAR