Tableaux ouverts (lang)
Sommaire |
Introduction
Les tableaux ouverts à une dimension sont supportés dans les variables locales et les paramètres de méthode. Les tableaux ouverts sont particulièrement adaptés au support des tableaux dans les Web Services.
Différences entre tableaux ouverts et tableaux statiques
Les tableaux statiques :
- Réserve autant de place qu’il comporte d’éléments dans la pile d’exécution.
- Peuvent être multi-dimensions.
- Sont toujours passés par valeurs.
Les tableaux ouverts :
- Ne réservent qu’une entrée dans la pile d’exécution, cette entrée référençant un tableau d’éléments agrandit au fur et à mesure des affectations.
- Ne peuvent être que mono-dimension.
- Sont toujours passés par adresse.
- Leurs indices commencent toujours à zéro.
Définition de tableaux ouverts
Pour définir une variable locale de type tableau ouvert :
var v:Array of string; s:string; idx:Integer; begin v[0] := 'A'; v[1] := 'B'; // s := ''; for idx:=0 to length(v)-1 do s := s+v[idx]; // showMessage(s); Result := FALSE; end;
Utilisation des tableaux ouverts dans les paramètres de méthode.
Il est possible de définir des paramètres de méthode sous forme de tableau ouvert ; par exemple :
function MethodName(p2:Array of string):string; var idx:Integer; stag:string; begin Result := ''; stag := ''; for idx:=0 to length(p2)-1 do begin Result := Result+stag+p2[idx]; stag := ' '; end; end;
Un paramètre ouvert peut être appelé à partir d’un tableau constant, d’une variable locale de type tableau statique ou d’une variable locale de type tableau ouvert.
Pour appeler une méthode ayant des paramètres ouverts à partir d’un tableau constant:
var s:string; begin s := MethodName(['ah','que','coucou']); showmessage(s); end;
Pour appeler une méthode ayant des paramètres ouverts à partir d’une variable locale de type tableau statique :
var s:string; v:Array[0..2] of string; begin v[0] := 'ah'; v[1] := 'que'; v[2] := 'coucou'; s := MethodName(v); showmessage(s); end;
Rappelez-vous que les tableaux statiques sont passés par valeurs, la méthode ne peut pas modifier le contenu du tableau.
Pour appeler une méthode ayant des paramètres ouverts à partir d’une variable locale de type tableau ouvert :
var s:string; v:Array of string; begin v[0] := 'ah'; v[1] := 'que'; v[2] := 'coucou'; s := MethodName(v); showmessage(s); end;
Rappelez-vous que les tableaux ouverts sont passés par adresse, la méthode peut modifier le contenu du tableau.
A l’intérieur de la méthode il est possible d’affecter des valeurs aux tableaux :
function MethodName(p2:Array of string):string; var idx:Integer; stag:string; begin Result := ''; stag := ''; p2[length(p2)] := ‘ !’ ; for idx:=0 to length(p2)-1 do begin Result := Result+stag+p2[idx]; stag := ' '; end; end;
Si l’indice d’affectation est supérieur à la taille du tableau celui-ci est agrandit et ses valeurs courantes sont conservées.
Dimensionnement des tableaux ouverts
L’agrandissement des tableaux ouverts est automatique, toutefois si vous ajoutez une grande quantité d’éléments à un tableau ouvert vous avez intérêt à utilisez la fonction setLength(tableau,taille) pour agrandir en une fois le tableau.
Les éléments non affectés d’un tableau ouvert sont non défini, par exemple :
var v:Array of string; s:string; idx:Integer; begin v[0] := 'A'; // initialise le tableau v[2] := 'B'; // agrandi le tableau à 3 élements // s := ''; for idx:=0 to length(v)-1 do s := s+v[idx]; // showMessage(s); Result := FALSE; end ;
Provoquera une erreur car l’élément d’indice 1 du tableau est non défini.
Tableaux ouverts contenant des objets
Les tableaux ouverts peuvent contenir des objets :
//Function TestArray4(p:Array of WFClasseA):string; var stag:string; idx:Integer; begin Result := ''; stag := ''; for idx:=0 to length(p)-1 do begin Result := Result+stag+p[idx].unCode; stag := ','; end; end; //Procedure TestArray5; var ls:WFClasseAList; pp:Array of WFClasseA; idx:Integer; begin ls := WFClasseA.CreateListWhere('','','unCode',True,10,[]); for idx:=0 to ls.Count-1 do begin pp[idx] := ls.Refs[idx]; end; // showMessage(TestArray4(pp)); end;
Fonctions associés aux tableaux ouverts
Sur un paramètre tableau ouvert les fonctions suivantes sont utilisables :