C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Conseil sur la construction de fonctions..

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Xavier
Guest





PostPosted: Fri Nov 24, 2006 10:23 pm    Post subject: Conseil sur la construction de fonctions.. Reply with quote



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





PostPosted: Fri Nov 24, 2006 10:23 pm    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote



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





PostPosted: Fri Nov 24, 2006 11:18 pm    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote



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





PostPosted: Mon Nov 27, 2006 10:11 am    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote

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





PostPosted: Mon Nov 27, 2006 1:04 pm    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote

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





PostPosted: Tue Nov 28, 2006 8:10 am    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote

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





PostPosted: Tue Nov 28, 2006 10:11 am    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote

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





PostPosted: Tue Nov 28, 2006 6:21 pm    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote

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





PostPosted: Wed Nov 29, 2006 3:18 am    Post subject: Re: Conseil sur la construction de fonctions.. Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.