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...)
 
 
(2 révisions intermédiaires par un utilisateur sont masquées)
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===
Ligne 132 : Ligne 130 :
 
Provoquera une erreur car l’élément d’indice 1 du tableau est non défini.
 
Provoquera une erreur car l’élément d’indice 1 du tableau est non défini.
  
===Fonctions associés aux tableaux ouverts===
+
===Tableaux ouverts contenant des objets===
 +
Les tableaux ouverts peuvent contenir des objets :
  
 +
<source lang='delphi'>
 +
//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;
 +
</source>
 +
 +
===Fonctions associés aux tableaux ouverts===
 
Sur un paramètre tableau ouvert les fonctions suivantes sont utilisables :  
 
Sur un paramètre tableau ouvert les fonctions suivantes sont utilisables :  
  

Version actuelle en date du 9 septembre 2014 à 07:58

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 :

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

Développement DSM





Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels