Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1556 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] tableaux dynamiques & paramètres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] tableaux dynamiques & paramètres

n°804049
fred_malet​te
Posté le 23-07-2004 à 10:17:26  profilanswer
 

Salut,
 
J'ai un type, que nous appelerons TMonBeauTableau, qui est un tableau dynamique de string :  
 

Code :
  1. type TMonBeauTableau = array of string;


 
J'ai une procédure, que nous appelerons MaBelleFonction, qui prend un paramètre de type TMonBeauTableau, de type nul par défaut :  
 

Code :
  1. procedure MaBelleFonction(Parameters : TMonBeauTableau= nil);


 
Ma question : comment appeler cette procédure en initialisant le paramètre tableau directement au moment de l'appel (comme cela est possible avec un tableau à taille fixe ?
 
En gros, là je suis obligé de faire :  
 

Code :
  1. var MonBeauParametre : TMonBeauTableau
  2. [...]
  3. SetLength(MonBeauParametre, 2);
  4. MonBeauParametre[0] := 'pipo';
  5. MonBeauParametre[1] := 'bimbo';
  6. MaBelleProcedure(MonBeauParametre);


 
Or, je voudrais faire quelque chose comme :
 

Code :
  1. MaBelleProcedure(('pipo', 'bimbo'));


 
Mais ..... comme je suis un gros boulet je n'y arrive pas :(
 
Merci pour votre aide =)
 

mood
Publicité
Posté le 23-07-2004 à 10:17:26  profilanswer
 

n°804213
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2004 à 11:51:57  profilanswer
 

Et si tu mets "array of string" plutôt qu'un type prédéfini ?
S'il n'accepte pas le nil, ce qui est bien possible, tu peux mettre [] (tableau vide) à la place normalement

n°804241
fred_malet​te
Posté le 23-07-2004 à 12:05:53  profilanswer
 

antp a écrit :

Et si tu mets "array of string" plutôt qu'un type prédéfini ?
S'il n'accepte pas le nil, ce qui est bien possible, tu peux mettre [] (tableau vide) à la place normalement


 
Salut, merci pour ta réponse.
 
En fait, j'ai deux possibilités :  
 
1) Utiliser un type maison, TMonBeauTableau. Dans ce cas :
- Je peux affecter une valeur par défaut à un paramètre de ce type (mais en utilisant nil, et non [])
- Je ne peux pas construire 'dynamiquement' un paramètre de ce type lors de l'appel à une fonction
 
2) Utiliser un type de base non redéfini (array of string). Dans ce cas !
- Je ne peux plus affecter de valeur par défaut à un paramètre de ce type, que ce soit via nil ou []
- Je peux construire dynamiquement un paramètre de ce type quand j'appelle ma procédure
 
Bref - pas moyen d'avoir le beurre et l'argent du beurre ? :)

n°804247
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2004 à 12:07:24  profilanswer
 

En y repensant, j'ai dû avoir ce problème aussi.
Deux solutions :
- passer "manuellement" un tableau vide [] plutôt que de pouvoir appeler la fonction sans paramètre
- faire une seconde fonction (overload) qui a le même nom mais pas de paramètre, et qui appelle la première en passant nil ou [] si veux avoir un seul endroit où cette valeur vide est définie.


Message édité par antp le 23-07-2004 à 12:07:45
n°804253
fred_malet​te
Posté le 23-07-2004 à 12:11:43  profilanswer
 

antp a écrit :

En y repensant, j'ai dû avoir ce problème aussi.
Deux solutions :
- passer "manuellement" un tableau vide [] plutôt que de pouvoir appeler la fonction sans paramètre
- faire une seconde fonction (overload) qui a le même nom mais pas de paramètre, et qui appelle la première en passant nil ou [] si veux avoir un seul endroit où cette valeur vide est définie.


 
Oui tout à fait, actuellement je me suis rabattu sur cette seconde solution. Mais je ne comprends pas qu'en faisant :  
 

Code :
  1. type TMonBeauType = array of string


 
On n'ait ces différences bizarres de comportement suivant qu'une variable ou un paramètre est déclaré(e) en tant que TMonBeauType ou en tant qu'array of string...  
 
Bref tant pis, et merci de t'être penché sur mon problème en tout cas !  

n°804258
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2004 à 12:15:39  profilanswer
 

Delphi est assez strict avec les types.
 
Il me semble qu'il y a un truc de ce genre :
 
var
  a: array of string;
  b: array of string;
 
a et b ne sont pas du même type
 
var
  a, b: array of string;
 
a et b sont du même type
 
:D


Message édité par antp le 23-07-2004 à 12:16:08
n°804265
fred_malet​te
Posté le 23-07-2004 à 12:20:26  profilanswer
 

antp a écrit :

Delphi est assez strict avec les types.
 
Il me semble qu'il y a un truc de ce genre :
 
var
  a: array of string;
  b: array of string;
 
a et b ne sont pas du même type
 
var
  a, b: array of string;
 
a et b sont du même type
 
:D


 
Hmm tu es sûr ?
 
J'aurais plutôt dit :  
 

Code :
  1. type
  2.   TPipo = array of string;
  3. var
  4.   a: array of string;
  5.   b: TPipo;
  6. a et b ne sont pas du même type
  7. var
  8.   a: array of string;
  9.   b: array of string;
  10. a et b sont du même type


 
Non ?
 
Enfin bref, le Pascal Objet est du genre super typé - on est bien d'accord :)


Message édité par fred_malette le 23-07-2004 à 12:20:56
n°804274
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2004 à 12:27:18  profilanswer
 


var
  a, b: array of string;
  c: array of string;
begin
  a := b;
  a := c;
end;
 


 
"a := b" ça passe, "a := c" donne "[Error] Unit1.pas(32): Incompatible types" ;)

n°804281
fred_malet​te
Posté le 23-07-2004 à 12:32:35  profilanswer
 

antp a écrit :


var
  a, b: array of string;
  c: array of string;
begin
  a := b;
  a := c;
end;
 


 
"a := b" ça passe, "a := c" donne "[Error] Unit1.pas(32): Incompatible types" ;)


 
Ha oui au temps pour moi : tu as parfaitement raison - d'ailleurs j'imagine que c'est pour ça qu'il est toujours conseillé de définir ses propres types personnalisés, non ?
 
(bon sauf que dans mon cas, je suis justement obligé d'utiliser un type de base ... :( )
 
Mais merci pour cette précision :)

n°804291
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2004 à 12:35:04  profilanswer
 

fred_malette a écrit :

d'ailleurs j'imagine que c'est pour ça qu'il est toujours conseillé de définir ses propres types personnalisés, non ?


 
C'est vrai que ça permet de rendre le code plus clair et parfois d'éviter des erreurs.
 
Il vaut par exemple mieux utiliser des énumérations que des entiers pour des paramètres, pour éviter les erreurs (d'ailleurs Delphi est bien à ce niveau : on ne risque pas d'accidentellement mettre une valeur d'une enum à la place d'une valeur d'une autre enum comme on le ferait en C).
 
Ça permet aussi de changer facilement un type, genre si on utilise TYear au lieu de Byte, quand on se rend compte que les années peuvent s'écrire sur 4 chiffres on change le type de TYear plutôt que de devoir aller le changer partout dans le code (exemple bidon car ce n'est pas toujours si simple, mais tu vois où je veux en venir).
 
Mais d'un autre côté avoir des dizaines de types à soi c'est un truc pour s'embrouiller :D


Message édité par antp le 23-07-2004 à 12:36:58

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] tableaux dynamiques & paramètres

 

Sujets relatifs
[IIS] Changer les paramètres internationnaux de IIS[delphi 7] conversion de word en string
Classement alphabétique de deux tableaux[delphi 7] convertisseur de code
Tableaux et CSS[Réglé - CSS / <DIV>] Taille minimale des "tableaux"
Brute Force MD5 en Delphi, c'est possible ;)[Delphi] Récupérer les infos affichées par une autre appli
SQL en DelphiConvertir Application TURBO PASCAL 7 WINDOWS en DELPHI
Plus de sujets relatifs à : [Delphi] tableaux dynamiques & paramètres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR