Tableaux ouverts (lang)

De Wiki1000
(Différences entre les versions)
(Nouvelle page : ===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...)
 
(Différences entre tableaux ouverts et tableaux statiques)
Ligne 3 : Ligne 3 :
  
 
===Différences entre tableaux ouverts et tableaux statiques===
 
===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.
  
*Un tableau statique réserve autant de place qu’il comporte d’éléments dans la pile d’exécution.
+
Les tableaux ouverts :
*Un tableau statique peut être multi-dimensions.
+
*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.
*Un tableau statique est toujours passé par valeurs.
+
*Ne peuvent être que mono-dimension.
*Un tableau ouvert ne réserve 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.
+
*Sont toujours passés par adresse.
*Un tableau ouvert ne peut être que mono-dimension.
+
*Leurs indices commencent toujours à zéro.
*Un tableau ouvert est toujours passé par adresse.
+
 
+
Il existe cependant des limitations sur l’usage des tableaux ouverts :
+
 
+
#Leur dimension doit être un ; les tableaux ouverts multi-dimension ne sont pas supportés.
+
#Les indices de tableau ouvert commencent toujours à zéro.
+
  
 
===Définition de tableaux ouverts===
 
===Définition de tableaux ouverts===

Version du 16 août 2009 à 09:41

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.

Fonctions associés aux tableaux ouverts

Sur un paramètre tableau ouvert les fonctions suivantes sont utilisables :

  • Length retourne la taille du tableau.
  • setLength définie la taille du tableau.

Développement DSM

Outils personnels