Declaração de procedures por parametro e referência!
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
Grato! :o
Dead_thinker
Curtidas 0
Respostas
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
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
07/11/2003
ô cara brigadão ai, deu pra sakar um poko mais.
Brigadu!
:D
Brigadu!
:D
GOSTEI 0
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:
Ataliba
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