Bonjour,
je voudrais savoir s'il y a moyen de faire passer une chaîne par adresse dans les paramètres d'une fonction afin d'éviter les recopies.
Merci





Bonjour,
je voudrais savoir s'il y a moyen de faire passer une chaîne par adresse dans les paramètres d'une fonction afin d'éviter les recopies.
Merci
En Delphi, il y a un mécanismes de compteur de référence qui réduit les copies ... mais j'ai quelques difficultés pour savoir sur quelle type de variable (locale, membre objet, globale ...)
sinon, tu as les mots clés var et const
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
pour une methode, la plupart du temps c'est plus rapide d'utiliser "const" :
methode la plus courrante qui permet de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part function untruc(const S: string): quelquechose;
unTruc('bonjour');
unTruc(S);
unTruc(Edit1.Text);
aprés tout depend de ce qu'il se passe dans la fonction.
on peu egalement la passer par pointeur, ce qui est bien aussi quand on crée une DLL :
unTruc(PChar(S))
Code : Sélectionner tout - Visualiser dans une fenêtre à part function untruc(const pS : PChar): quelquechose;
unTruc('bonjour');
unTruc(Edit1.GetText);
la methode la moins performante etant de faire ceci :
unTruc(S);
Code : Sélectionner tout - Visualiser dans une fenêtre à part function untruc(s : string): quelquechose;
unTruc('bonjour); // erreur
unTruc(Edit1.Text); // erreur
on utilisera var dans ce cas, S doit etre lue puis peut être assignée, force l'utilisation d'une variable pour S :
et on utilisera out dans ce cas, S n'est jamais lues mais peut être assignée, force l'utilisation d'une variable pour S :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure unTruc(var S: string); begin if S = 'quelquechose' then S := 'untruc'; end;
et bien sur, S peut être lue mais ne sera jamais assignée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure unTruc(out S: string); begin S := DateToStr(Now); // S = 28/10/2009 15h30 end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure unTruc(const S: string); begin if S = 'quelquechose' then halt(0); end;
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Idem que pour Rayek, cela fonctionne très bien chez moi aussi !
Sinon, non const n'est pas le mode par défaut, qui lui duplique les valeurs, car l'on peut modifier la valeur du paramètre localement à la fonction sans modifier la valeur d'origine, ... cela duplique vraiement (je parle pas du compteur de référence qui optimise cela)
Sinon, idem, j'utilise const à 90% par ce qu'en Delphi 3, tu voyais vraiement la différence, même rapport au compteur de ref, ...
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs





Merci pour vos réponses. Avec const c'est parfait
Par contre en retour de fonction comment ça se passe ?
Avec un code du genre :
Combien y a t il de recopie de chaine ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 function Toto: String; begin Result := 'la chaine de retour'; end; ... var MaChaine: String; begin MaChaine := Toto; end;
Partager