Delphi: Passando vetor por referência
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”.