 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Xavier Guest
|
Posted: Fri Nov 24, 2006 10:23 pm Post subject: Conseil sur la construction de fonctions.. |
|
|
Bonjour,
Je fais de la programmation ocasionnellement en C++ (je ne suis pas
programmeur a la base) et j'ai besoin de petits conseils sur la construction
de fonctions.
1. Imaginons une fonction créant un vector de nChiffres contenant la même
Valeur.
Ai je intéret a l'implémenter sous la forme (1) ou (2)
(1) std::vector CreateVector(Valeur, nChiffre);
(2) (bool ou) void CreateVector(std::vector& vecteur, Valeur, nChiffre);
Naturellement vu que je code plutot en VBA a l'origine et que ma fonction ne
doit pas me renvoyer d'indicateur d'erreur je partirais plutot sur le 1.
J'imagine que les programmeurs venant du C auront sans doute tendance à la
développer selon la forme 2. Mais y'a t'il un (dés)avantage a la creer sous
une des formes plutot qu'une autre?
2. Concernant l'élaboration de fonctions contenant des parametres d'entrées
et de sorties et renvoyant une valeur booléenne (vrai/faux) selon que la
fonction réussit ou pas. Je viens de lire un article d'un programeur plutot
connu conseillant de commencer par les paramètres d'entrée et de terminer
par les parametres de sorties
(1) bool MaFonction (inParam1, inParam2, inParam3, & outParam1, &
outParam2);
(inParam designe un parametre d'entrée et outParam designe un parametre de
sortie)
Mais comme ma fonction contient des parametres d'entrée ayant des valeurs
par défaut j'aurais eu tendance a faire:
(2) bool MaFonction ( & outParam1, & outParam2, inParam1, inParam2,
inParam3=0);
Dans la pratique, pour une question de rigueur et afin ne pas se tromper en
utilisant ces fonctions j'imagine qu'il faut choisir entre 1 et 2 et
l'appliquer ensuite a l'ensemble des fonctions qu'on rédige. Alors que
choisir? Quels sont vos pratiques sur ce sujet?
Voila ces questions sont sans soute assez basiques. Surtout si vous
programmez depuis pas mal de temps..
Merci d'avance
Xavier |
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Fri Nov 24, 2006 10:23 pm Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Le 24-11-2006, Xavier <xni (AT) free (DOT) fr> a écrit :
| Quote: | Je fais de la programmation ocasionnellement en C++ (je ne suis pas
programmeur a la base) et j'ai besoin de petits conseils sur la construction
de fonctions.
1. Imaginons une fonction créant un vector de nChiffres contenant la même
Valeur.
|
Attention à la terminologie: est-ce qu'elle crée un vecteur ou est-ce
qu'elle remplis un vecteur déjà créé ? La (1) renvoit un vecteur,
la (2) en modifie un, crée par ailleurs.
| Quote: | Ai je intéret a l'implémenter sous la forme (1) ou (2)
(1) std::vector CreateVector(Valeur, nChiffre);
(2) (bool ou) void CreateVector(std::vector& vecteur, Valeur, nChiffre);
Naturellement vu que je code plutot en VBA a l'origine et que ma fonction ne
doit pas me renvoyer d'indicateur d'erreur je partirais plutot sur le 1.
J'imagine que les programmeurs venant du C auront sans doute tendance à la
développer selon la forme 2. Mais y'a t'il un (dés)avantage a la creer sous
une des formes plutot qu'une autre?
|
Pour ma part, ce serait plutôt l'appel du constructeur de std::vector
qui fait déjà ça tout seul.
| Quote: | 2. Concernant l'élaboration de fonctions contenant des parametres d'entrées
et de sorties et renvoyant une valeur booléenne (vrai/faux) selon que la
fonction réussit ou pas.
|
Que signifie 'réussir ou pas' ?
En C++, on gère plutôt les échecs par exceptions.
| Quote: | Je viens de lire un article d'un programeur plutot
connu conseillant de commencer par les paramètres d'entrée et de terminer
par les parametres de sorties
|
Ah ? Qui ça ?
Les conventions C sont plutôt l'inverse:
strncpy(dest,scr,capa);
Ce qui correspond au 'sens' classique de l'affectation
x= 2+4;
| Quote: | (1) bool MaFonction (inParam1, inParam2, inParam3, & outParam1, &
outParam2);
(inParam designe un parametre d'entrée et outParam designe un parametre de
sortie)
Mais comme ma fonction contient des parametres d'entrée ayant des valeurs
par défaut j'aurais eu tendance a faire:
(2) bool MaFonction ( & outParam1, & outParam2, inParam1, inParam2,
inParam3=0);
Dans la pratique, pour une question de rigueur et afin ne pas se tromper en
utilisant ces fonctions j'imagine qu'il faut choisir entre 1 et 2 et
l'appliquer ensuite a l'ensemble des fonctions qu'on rédige. Alors que
choisir? Quels sont vos pratiques sur ce sujet?
|
Moi, c'est (2).
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois) |
|
| Back to top |
|
 |
Xavier Guest
|
Posted: Fri Nov 24, 2006 11:18 pm Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Merci pour les remarques,
"Marc Boyer" <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> a écrit dans le message
de news: slrneme90b.lj.Marc.Boyer (AT) localhost (DOT) localdomain...
| Quote: | Le 24-11-2006, Xavier <xni (AT) free (DOT) fr> a écrit :
Je fais de la programmation ocasionnellement en C++ (je ne suis pas
programmeur a la base) et j'ai besoin de petits conseils sur la
construction
de fonctions.
1. Imaginons une fonction créant un vector de nChiffres contenant la même
Valeur.
Attention à la terminologie: est-ce qu'elle crée un vecteur ou est-ce
qu'elle remplis un vecteur déjà créé ? La (1) renvoit un vecteur,
la (2) en modifie un, crée par ailleurs.
D'accord, ma question est mal posé alors. Dois je créer le vecteur, et agir |
sur celui via la fonction (par référence). Ou utiliser une fonction qui
créer et renvoie le vecteur?
| Quote: | Ai je intéret a l'implémenter sous la forme (1) ou (2)
(1) std::vector CreateVector(Valeur, nChiffre);
(2) (bool ou) void CreateVector(std::vector& vecteur, Valeur, nChiffre);
Naturellement vu que je code plutot en VBA a l'origine et que ma fonction
ne
doit pas me renvoyer d'indicateur d'erreur je partirais plutot sur le 1.
J'imagine que les programmeurs venant du C auront sans doute tendance à
la
développer selon la forme 2. Mais y'a t'il un (dés)avantage a la creer
sous
une des formes plutot qu'une autre?
Pour ma part, ce serait plutôt l'appel du constructeur de std::vector
qui fait déjà ça tout seul.
2. Concernant l'élaboration de fonctions contenant des parametres
d'entrées
et de sorties et renvoyant une valeur booléenne (vrai/faux) selon que la
fonction réussit ou pas.
Que signifie 'réussir ou pas' ?
En C++, on gère plutôt les échecs par exceptions.
Je voulais dire que si une valeur d'entrée n'est pas correct, la fonction |
renvoie false et je ne m'intérresse pas a ces parametres de sorties
| Quote: |
Je viens de lire un article d'un programeur plutot
connu conseillant de commencer par les paramètres d'entrée et de terminer
par les parametres de sorties
Ah ? Qui ça ?
Steve McConnell, Tout sur le code, Chap 7.5 (P190)
Les conventions C sont plutôt l'inverse:
strncpy(dest,scr,capa);
Ce qui correspond au 'sens' classique de l'affectation
x= 2+4;
(1) bool MaFonction (inParam1, inParam2, inParam3, & outParam1, &
outParam2);
(inParam designe un parametre d'entrée et outParam designe un parametre
de
sortie)
Mais comme ma fonction contient des parametres d'entrée ayant des valeurs
par défaut j'aurais eu tendance a faire:
(2) bool MaFonction ( & outParam1, & outParam2, inParam1, inParam2,
inParam3=0);
Dans la pratique, pour une question de rigueur et afin ne pas se tromper
en
utilisant ces fonctions j'imagine qu'il faut choisir entre 1 et 2 et
l'appliquer ensuite a l'ensemble des fonctions qu'on rédige. Alors que
choisir? Quels sont vos pratiques sur ce sujet?
Moi, c'est (2).
D'accord ca me rassure dans ce cas..
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
|
Encore merci
Xavier |
|
| Back to top |
|
 |
Serge Paccalin Guest
|
Posted: Mon Nov 27, 2006 10:11 am Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Le 24.11.2006 18:18, :
| Quote: | D'accord, ma question est mal posé alors. Dois je créer le vecteur, et agir
sur celui via la fonction (par référence). Ou utiliser une fonction qui
créer et renvoie le vecteur?
|
Il n'y a pas de réponse toute faite à cette question, cela dépend des
scénarios d'utilisation. D'ailleurs, en C++, rien ne t'empêche de
fournir les deux ; tu écris d'abord la version (2) :
void CreateVector(std::vector& vecteur, Valeur, nChiffre)
{
// Ton code ici
...
}
puis tu écris une version (1) qui appelle (2) :
std::vector CreateVector(Valeur, nChiffre)
{
std::vector Temp;
CreateVector(Temp,Valeur,Chiffre);
return Temp;
}
Avec le temps, tu verras laquelle tu appelles le plus souvent.
--
___________
_/ _ \_`_`_`_) Serge PACCALIN -- sp ad mailclub.net
\ \_L_) Pour bien répondre avec Google, ne pas cliquer
-'(__) « Répondre », mais « Afficher les options »,
_/___(_) puis cliquer « Répondre » (parmi les options). |
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Mon Nov 27, 2006 1:04 pm Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Le 24-11-2006, Xavier <xni (AT) free (DOT) fr> a écrit :
| Quote: | "Marc Boyer" <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> a écrit dans le message
de news: slrneme90b.lj.Marc.Boyer (AT) localhost (DOT) localdomain...
Le 24-11-2006, Xavier <xni (AT) free (DOT) fr> a écrit :
Attention à la terminologie: est-ce qu'elle crée un vecteur ou est-ce
qu'elle remplis un vecteur déjà créé ? La (1) renvoit un vecteur,
la (2) en modifie un, crée par ailleurs.
D'accord, ma question est mal posé alors. Dois je créer le vecteur, et agir
sur celui via la fonction (par référence). Ou utiliser une fonction qui
créer et renvoie le vecteur?
|
Ben, ça dépend de l'usage.
| Quote: | 2. Concernant l'élaboration de fonctions contenant des parametres
d'entrées
et de sorties et renvoyant une valeur booléenne (vrai/faux) selon que la
fonction réussit ou pas.
Que signifie 'réussir ou pas' ?
En C++, on gère plutôt les échecs par exceptions.
Je voulais dire que si une valeur d'entrée n'est pas correct, la fonction
renvoie false et je ne m'intérresse pas a ces parametres de sorties
|
Ben oui, mais j'aurais plutôt tendance à gérer ça par
des exceptions moi.
| Quote: | Je viens de lire un article d'un programeur plutot
connu conseillant de commencer par les paramètres d'entrée et de terminer
par les parametres de sorties
Ah ? Qui ça ?
Steve McConnell, Tout sur le code, Chap 7.5 (P190)
|
Faudrait voir quels arguments il donne pour cela.
Mais les conventions C et de la STL C++ sont plutôt dans
l'autre sens, et la syntaxe pour les arguments par défauts
idem.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois) |
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Tue Nov 28, 2006 8:10 am Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Le 28-11-2006, James Kanze <james.kanze (AT) gmail (DOT) com> a écrit :
| Quote: | Mais les conventions C et de la STL C++ sont plutôt dans
l'autre sens, et la syntaxe pour les arguments par défauts
idem.
C'est une question de style. En C, effectivement, on a toute la
famille des str... et des mem... avec les paramètres en sortie
d'abord -- l'argument, il me semble, c'est que ça correspond
aux opérateurs d'affectation, qui eux aussi modifie ce qui est à
gauche. En C++, en revanche, la STL fait l'inverse, avec
std::copy et al.
|
C'est marrant, moi je pensais à sort, remove...
| Quote: | Personnellement, je préfère les paramètres de sortie d'abord,
mais c'est sans doute surtout parce que j'en suis habitué,
plutôt que pour une raison technique réele. (J'argue en général
que les paramètres de sortie sont plus importants, et qu'on les
remarque mieux s'ils précède, mais je crois que c'est un
argument « après les faits », conçu surtout pour justifier un
choix déjà fait.)
Mais c'est vrai qu'on aurait pour ainsi dire jamais des valeurs
par défaut pour les paramètres de sortie. C'est la première fois
que j'entends cet argument, mais c'est effectivement une raison
technique pour préférer cet ordre. Si on ajoute le fait que dans
les operator<op>=, le paramètre de sortie (ou plutôt
d'entrée/sortie) doit obligatoirement être le premier, je crois
qu'on a effectivement des raisons techniques pour justifier le
choix. Mais pas des raisons assez fortes pour être impératives.
|
Oui, on est pas dans la règle stricte, plutot dans la convention.
| Quote: | Et évidemment, il y a un style de programmation qui évite les
paramètres de sortie ou d'entrée/sortie complètement. Dans les
faits, je m'en sers très peu.
|
Idem.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois) |
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Tue Nov 28, 2006 10:11 am Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Marc Boyer wrote:
| Quote: | Le 24-11-2006, Xavier <xni (AT) free (DOT) fr> a écrit :
"Marc Boyer" <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> a écrit dans le message
de news: slrneme90b.lj.Marc.Boyer (AT) localhost (DOT) localdomain...
Le 24-11-2006, Xavier <xni (AT) free (DOT) fr> a écrit :
|
[...]
| Quote: | Je viens de lire un article d'un programeur plutot
connu conseillant de commencer par les paramètres d'entrée et de terminer
par les parametres de sorties
Ah ? Qui ça ?
Steve McConnell, Tout sur le code, Chap 7.5 (P190)
Faudrait voir quels arguments il donne pour cela.
Mais les conventions C et de la STL C++ sont plutôt dans
l'autre sens, et la syntaxe pour les arguments par défauts
idem.
|
C'est une question de style. En C, effectivement, on a toute la
famille des str... et des mem... avec les paramètres en sortie
d'abord -- l'argument, il me semble, c'est que ça correspond
aux opérateurs d'affectation, qui eux aussi modifie ce qui est à
gauche. En C++, en revanche, la STL fait l'inverse, avec
std::copy et al.
Personnellement, je préfère les paramètres de sortie d'abord,
mais c'est sans doute surtout parce que j'en suis habitué,
plutôt que pour une raison technique réele. (J'argue en général
que les paramètres de sortie sont plus importants, et qu'on les
remarque mieux s'ils précède, mais je crois que c'est un
argument « après les faits », conçu surtout pour justifier un
choix déjà fait.)
Mais c'est vrai qu'on aurait pour ainsi dire jamais des valeurs
par défaut pour les paramètres de sortie. C'est la première fois
que j'entends cet argument, mais c'est effectivement une raison
technique pour préférer cet ordre. Si on ajoute le fait que dans
les operator<op>=, le paramètre de sortie (ou plutôt
d'entrée/sortie) doit obligatoirement être le premier, je crois
qu'on a effectivement des raisons techniques pour justifier le
choix. Mais pas des raisons assez fortes pour être impératives.
Et évidemment, il y a un style de programmation qui évite les
paramètres de sortie ou d'entrée/sortie complètement. Dans les
faits, je m'en sers très peu.
--
James Kanze (GABI Software) email:james.kanze (AT) gmail (DOT) com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Tue Nov 28, 2006 6:21 pm Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
On 27 Nov 2006 23:45:54 -0800, "James Kanze" <james.kanze (AT) gmail (DOT) com>:
| Quote: | Personnellement, je préfère les paramètres de sortie d'abord,
|
Moi aussi. Puisque le type de retour est à gauche, je mets les autres
sorties à gauche. |
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Wed Nov 29, 2006 3:18 am Post subject: Re: Conseil sur la construction de fonctions.. |
|
|
Fabien LE LEZ wrote:
| Quote: | On 27 Nov 2006 23:45:54 -0800, "James Kanze" <james.kanze (AT) gmail (DOT) com>:
Personnellement, je préfère les paramètres de sortie d'abord,
Moi aussi. Puisque le type de retour est à gauche, je mets les autres
sorties à gauche.
|
Encore une motivation. Aucune des motivations n'est réelement
concluante, mais prises dans l'ensemble, et dans l'absence des
motivations contraires, je crois qu'on peut conclure que c'est
un bon conseil.
--
James Kanze (Gabi Software) email: james.kanze (AT) gmail (DOT) com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|