web-dev-qa-db-fra.com

Comment retourner un tableau à partir d'une fonction Delphi?

J'ai une fonction dans mon application qui doit retourner un tableau. J'ai trouvé dans quelques endroits comment faire cela en déclarant le type de tableau, par ex.

type
  TStringArray = array of string; 

Et puis déclarer ma fonction

function SomeFunction(SomeParam: Integer): TStringArray;

Mon problème est d'essayer de configurer cela sous une forme qui a à la fois une interface et une implémentation. Comment déclarer mon type et avoir une déclaration de fonction avec ce type dans l'interface?

25
Joe
unit Unit1;

interface

uses SysUtils;

type
  TStringArray = array of string;

function SomeFunction(SomeParam: integer): TStringArray;

...

implementation

function SomeFunction(SomeParam: integer): TStringArray;
begin
  SetLength(result, 3);
  result[0] := 'Alpha';
  result[1] := 'Beta';
  result[2] := 'Gamma';
end;

...

end.

La règle d'or est que la section interface d'une unité décrit les types de données utilisés par l'unité et les types, classes et fonctions (leurs signatures) qui résident dans l'unité. C'est ce que voient toutes les autres unités. La section implementation contient l'implémentation des classes et des fonctions. Ce n'est pas visible pour les autres unités. Les autres unités doivent se préoccuper de l'interface de l'unité, du "contrat" signé par cette unité et de l'unité externe, et non des "détails de mise en œuvre" figurant dans la section de mise en œuvre.

35
Andreas Rejbrand

Si vous Delphi est assez récent, vous n'avez pas besoin de déclarer un nouveau type, en le déclarant comme TArray<String>.

Exemple copié et collé à partir de la réponse ci-dessus:

unit Unit1;

interface

function SomeFunction(SomeParam: integer): TArray<String>;

implementation

function SomeFunction(SomeParam: integer): TArray<String>;
begin
  SetLength(result, 3);
  result[0] := 'Alpha';
  result[1] := 'Beta';
  result[2] := 'Gamma';
end;

end.
15