Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
9 oct. 2006 à 17:35
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
10 oct. 2006 à 22:36
salut a tous, une petite question toute bete : est il possible de laisser la valeur par defaut d'un parametre en mettant une valeur aux suivants?
pour etre plus clair, j'ai une fonction
procedure MyProc(a: integer; b: integer 5; c: integer 7);
et je voudrais lui faire appel en precisant a et c, et en laissant b par defaut :
MyProc(1, , 9); // => MyProc(1, 5, 9);
bien sur je pourrai mettre la meme valeur que celle par defaut pour b, mais je veu que tous les appels soit mis a jour si je modifie une des valeurs par defaut.
PS : non, je prefererai eviter de mettre cette valeur dans une constante ;)
procedure MaProc(pStructA : pStructTypeA; pStructB : pStructTypeB);
var
SA : pStructTypeA;
SB : pStructTypeB;
begin
if Assigned(pStructA) then SA := pStructA else SA := @DefaultA;
if Assigned(pStructB) then SB := pStructB else SB := @DefaultB;
with SA^ do begin
(...)
end;
with SB^ do begin
(...)
end;
end;
procedure UtiliseMaProc;
var
PA : TStructTypeA;
PB : TStructTypeB;
begin
MaProc(nil, @PB);
MaProc(@PA, @PB);
MaProc(@PB,nil);
MaProc(nil,nil);
end;
voila ... au final ... c'est toujours aussi souple et ça donne un bon exemple d'utilisation des pointeurs.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 10 oct. 2006 à 09:08
mwais, ca revient quasiement au meme que de mettre la valeur dans une constante!
j'aurai juste voulu savoir si il etait possible d'omettre un parametre ayant une valeur par defaut, et en precisant le(s) parametre(s) suivant(s).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 10 oct. 2006 à 21:40
ouais le overload c'est bien, mais j'vais pas m'amuser a declarer 100 fois ma procedure en fonction de la combinaison des parametres que je veu utiliser. par exemple, si j'ai la procedure suivante :
maProc(x: integer; b: boolean=false; e:extended=1; s:string='3'; i: integer=4);
ca veut dire que, en fonction des parametres que je choisi de lui passer, il faut que je declare
maProc(x: integer; b: boolean=false; e:extended=1; s:string='3'; i: integer=4); //si j'ai (b) ou (b,e) ou (b,e,s) ou (b,e,s,i)
maProc(x: integer; i: integer=4; b: boolean=false; e:extended=1; s:string='3'); // si j'ai (i) ou (i,b) ou (i,b,e)
...
dans ce cas la je m'en sors plus si j'ai trop de parametres !!!
et puis si j'ai qu des int par exemple, la surcharge ne marche pas:
maProc(p1:integer=1; p2:integer=2; p3:integer=3);
la par exemple je peu pas mettre d'overload, alors que je voudrais pouvoir specifier seulement p1 et p3.
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 10 oct. 2006 à 21:51
ouep et bien passe une string genre "int:3|boo:true|ext:2|str:ok" puis tu parse le char | pour trier le tout toi meme
je vois plus que ça et c'est pas trop crade =)
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 10 oct. 2006 à 22:05
et avec ça, comment peut-il omettre volontairement de mettre un parametre dans sa procedure ?
donne un exemple concret avec "MaProc('abc',0,false)" ou "MaProc(2,true,2.5)"
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 10 oct. 2006 à 22:09
desolé pour le double post,
de plus, avec les record passé en pointeur, ce serat plus rapide.
au final on se retrouve avec une procedure plus simple a utiliser, une structure invariabe et ou l'on peu definir plusieur parametres prédefinits (presets) bref ... que du tout bon.
je pense que c'est la meilleure solution qu'on puisse prendre.
surtout que, par la suite, on peu enregistrer trés facilement ces structure dans des streams.
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 10 oct. 2006 à 22:20
Y'a peut-être une solution avec l'overload de Julio et qq variables à la fin des paramètres qui indiquent le nombre de paramètres zapés et leur emplacement...
J'sais pas si je suis bien clair, sur ce coup... :)
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 10 oct. 2006 à 22:33
pas mal foxi, ca correspond pas mal a ce que je cherche :)
pour repondre a julio, c'est l'utilisation des const qui permet les valeurs par defaut.
par exemple :
procedure MaProc(a:integer=0; b: extended=1.5; c:string='str');
...
MaProc(); //1
MaProc(5,, 'toto'); //2
devient
type
TMaProcStruct = record
a: integer;
b: extended;
c: string;
end;
const
MaProcDefaut : TMaProcStruct = (0, 1.5, 'str');
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 10 oct. 2006 à 22:36
merci pour la solution. ca fai tjrs un peu de code en plus qu'en omettant un parametre directement dans la fonction, mais c'est super propre et ca reste la proposition la plus proche de ma requete :) merfci pour les 2 exemples foxi ... et aux autres aussi bien sur qui se sont creusé le crane pour moi ;)