Delphi: Passando vetor por referência

11 de janeiro de 2011 william Delphi

Um truque interessante se torna útil quando é preciso passar vetores por referência no Delphi e alterar a dimensão do mesmo. Passagem de variáveis por referência no Delphi é feita de forma bem simples bastado acrescentar a palavra reservada “var” antes do nome do parâmetro no escopo da função/método.
Um exemplo simples de passagem de parâmetros de referencia:


procedure Incremento(var x : integer);
begin
  x := x + 1;
end;

O problema surge quando o parâmetro for um vetor e o mesmo tiver seu tamanho alterado dentro da função, pois nos demais casos tudo acorre normalmente, como pode ser visto no exemplo abaixo:


function ModificaVetor(var Str : array of string): string;
begin
  Str[0] := '';
end;

porem…


function InflaVetor(var Str : array of string): string;
begin
  SetLength(Str, Length(Str) + 1);
end;

Nesse caso teremos um erro de compilação por incompatibilidade de tipos. Nesses casos veja o truque:


type
  TStringArray = array of string;

function InflaVetor(var Str : TStringArray): string;
begin
  SetLength(Str, Length(Str) + 1);
end;

Um exemplo básido de uso seria:


var
  s : TStringArray;
begin
  SetLength(s, 10);
  InflaVetor(s);
  ShowMessage(IntToStr(Length(s)));
end;

Neste exemplo a mensagem apresentaria ’11′ pois a função conseguiu alterar o tamanho do vetor. Concluindo podemos ver que a definição de um tipo especifico (TStringArray) possibilitou que o nosso vetor fosse passado normalmente e tivesse seu tamanho alterado pela função “InflaVetor”.

delphi, referência, setlength, var,


Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress. Designed by elogi.