Declaração de procedures por parametro e referência!

Delphi

07/11/2003

Olá colegas. Um iniciante em programação deseja saber qual a diferença de procedure normal, recebendo parametros e/ou referência. E se possível gostaria que demostrassem como é a sintaxe!

Grato! :o


Dead_thinker

Dead_thinker

Curtidas 0

Respostas

Beppe

Beppe

07/11/2003

A sintaxe é simples passando por valor: é só deixar o nome e o tipo do parâmetro. Quando chamar uma rotina, o Delphi passa argumentos por valor copiando o valor armazenado pela expressão(nome de variável é expressão). Ele copia arrays e strings de tamanho fixo, records, escalares. No caso de objetos, ponteiros e variáveis dinâmicas como strings, ele copia apenas a referência ao conteúdo, não o conteúdo em si.

Parâmetros por referência são prefixados pela palavra [b:acec2207eb]var[/b:acec2207eb]. Argumentos var precisam ser [i:acec2207eb]l-value[/i:acec2207eb], ou seja, uma variável, uma subscrição num array, etc; não pode ser uma expressão ordinária.

Ataliba


GOSTEI 0
Dead_thinker

Dead_thinker

07/11/2003

ô cara brigadão ai, deu pra sakar um poko mais.
Brigadu!
:D


GOSTEI 0
Beppe

Beppe

07/11/2003

Esqueci de colocar a diferença entre os dois, que se deve ao depois da rotina. Argumentos por valor, se alterados dentro da rotina, lá fora esta alteração não é vista. Já por referência, se é atribuído um novo valor a um parâmetro var, esta mudança poderá ser observada após a rotina, no código que a chamou. Ex:

function PorValor(X: Integer): Integer;
begin
  Inc(X);
  Result := X;
end;

function PorReferência(var X: Integer): Integer;
begin
  Inc(X);
  Result := X;
end;

procedure TestaValor;
var
  X, Y: Integer;
begin
  X := 10;
  Y := PorValor(X);
  // aqui X = 10 e Y = 11
end;

procedure TestaReferencia;
var
  X, Y: Integer;
begin
  X := 10;
  Y := PorReferencia(X);
  // aqui X = 11 e Y = 11
end;


Ataliba


GOSTEI 0
POSTAR