OVH Cloud OVH Cloud

recherche d'un element suivant la valeur d'un des champs

184 réponses
Avatar
Alain Cabiran
Bonjour,

j'ai cherché, testé, retesté, essayé, réessayé et n'ai pas trouvé
de solution à ce problème

assume using namespace std :-)

imaginons avoir :

class objet
{
public:
objet(int valeur) : monchamps(valeur) { } ;
int getChamps() const { return monchamp; } ;
private:
int monchamps();
};

un conteneur : list<objet> liste;
son iterateur : list<objet>::iterator it;

une valeur prédéfinie : int valeur = 5;

est-ce qu'il est possible, en utilisant les adaptateurs stl,
d'avoir l'équivalent de :

cherche dans liste le premier élément avec la condition
it->monchamp == valeur ?

j'ai commencé par :

it = find_if(liste.begin(), liste.end(), TOTO);

ensuite j'ai cherché TOTO : bind2nd(equal_to<int>(), valeur)

et là ... je sais pas, j'ai essayé de placer :

mem_fun_ref(&objet::getChamps) mais je n'ai pas trouvé où le mettre
et même si je peux seulement l'y mettre.

quelqu'un a une idée ?

Alain Cabiran

ps: il manque évidemment le constructeur de copie, les operateurs de
comparaisons, ... dans la classe, c'est juste pour faire plus court.

10 réponses

Avatar
Michel Michaud
Dans le message 4162572b$0$8210$,
Michel Michaud wrote:

Tant mieux si tu peux t'exprimer en anglais aussi bien qu'en
français et que ça permet à plus de gens concernés de comprendre
ton code. Il faut simplement réaliser que ce n'est pas automatique.


Il n'est pas nécessaire non plus de s'exprimer aussi bien en anglais
qu'en français pour donner des noms anglais à ses identificateurs
(et heureusement).


Dans ce cas, tu risques d'avoir des noms moins bien choisis. Je
ne sais pas si le coût est justifiable... Un anglophone qui lira
tes noms ne pourra pas deviner ce que tu aurais dû écrire. Si tu
écris en français, il pourra au moins consulter un dictionnaire
ou consulter un francophone pour essayer de comprendre ce que tu
voulais dire.

Pour moi, le choix des identificateurs et l'écriture judicieuse
des commentaires est de première importance dans du code. Peu de
programmeurs le font assez bien en général. Le faire dans une
autre langue que la sienne est encore plus difficile. Je n'ai pas
dit impossible...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
Michel Michaud
Dans le message 41625838$0$8210$,
Ce n'est donc pas que le code doit pouvoir être lu par des
personnes qui ne parlent que l'anglais, mais plutôt que le code
doit pouvoir être lu par des personnes qui ne parlent pas français.


Si tu dois écrire du code dans ce but, c'est sûr que l'anglais est
un bon choix. Je ne crois simplement pas que ce soit un but général.

Si on m'offrait d'acheter mon code pour un programme que j'ai
codé en français, en exigeant qu'il soit en anglais, je n'aurai
pas de difficulté à le traduire. Si je n'ai pas une telle demande,
je trouve plus simple/approprié/utile/intéressant de l'écrire en
français.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michel Michaud
Dans le message ,
On Mon, 4 Oct 2004 23:23:53 -0400, "Michel Michaud" :
Vu le bordel que c'est sur Usenet-fr, alors que ça existe depuis
des années, je doute que ça donne grand-chose avant pas mal
d'années.


Mais c'est plus local (donc plus simple) quand on parle de code
destiné à un compilateur.


Mais un code n'est pas forcément destiné qu'au compilateur. Il
arrive que des programmeurs s'échangent du code.


Je ne sais pas pourquoi Usenet-fr rend les choses compliquées,
mais je sais que le code de caractères utilisé dans Windows (par
exemple) est bien défini. Celui de Linux aussi. (etc.)

C'est évident que j'espère que mes élèves comprendront un jour
l'anglais assez bien pour lire du code en anglais,


J'espère pour eux, sinon la programmation leur restera un sujet
théorique.


Je t'assure que tu te trompes. En tout cas, ici. Certains emplois
demandent d'être bilingue (ou mieux), mais pas tous. Ce qui ne
veut pas dire qu'on ne cherche pas à ce que tout le monde soit
capable de comprendre l'anglais...

Et pas seulement du code, mais aussi des manuels d'utilisation.


Lire est une chose. Écrire et parler est très différent. Je crois
que la plupart de mes élèves peuvent lire suffisamment bien. Pour
le reste, c'est moins clair.

on ne peut lui demander de maîtriser cette autre
langue au point de pouvoir s'exprimer aussi parfaitement avec elle.


Pour le code, je pense que si


Je crois au contraire que c'est plus difficile pour le code que
pour le reste...

-- j'espère qu'un programmeur a assez
de vocabulaire anglais pour bien choisir des identifiants (au pire,
on lui fournit un dictionnaire français-anglais, c'est comme ça
qu'on apprend).


Si ton patron te paye pour ça, tant mieux. Je ne crois pas que ce
soit la chose la plus efficace. Le problème c'est l'effort. Si quelqu'un se
contente de « moins que parfait » en français et qu'on
lui demande d'écrire en anglais, il risque d'être encore moins
exigeant...

[...]
Traduire les commentaires a posteriori est toujours faisable.
Traduire les identificateurs aussi, s'ils sont bien clairs et/ou

bien commentés :-)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
Michel Michaud
Dans le message ,
Je me suis alors rendu compte que le petit effort
de coder en anglais pouvait être rentable, « au cas où ».


C'est justement là que je ne suis pas d'accord. Si tu as 1 % de
chance que ton code soit lu par un non francophone, mais que tu
auras des milliers de lecteurs francophone je suis pas mal certain
qu'il vaut mieux écrire en français. À 10 %, je crois encore la
même chose et je ne saurais dire à quel pourcentage je vais
changer d'avis...

En fait, la simple existence de fr.comp.lang.c++ me semble
indicatif qu'on ne peut raisonnablement croire que l'anglais
suffit en informatique...

Je pense qu'à long terme, cela aide même à lire son propre code.
On s'habitue à exprimer ou lire du code en anglais, que ce soit le
sien ou du code d'autrui.


C'est une bonne chose. Une autre bonne chose est d'écrire le code
le plus clair et précis possible. Il est possible que ces deux-là
soient un peu contradictoires. S'il faut choisir, je choisis la deuxième.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| De même, en voiture, je ne dépasse jamais dans un virage, même si je
| ne suis pas sûr qu'une voiture vient en face.

Mais est-ce que tu passes le « global test » ?

-- Gaby
Avatar
Michel Michaud
Dans le message ,
J'ai du mal à voir pourquoi le problème des accents est plus simple
dans du code destiné à un compilateur que dans les articles envoyés
sur Usenet-fr.


Les mots réservés et les délimiteurs de C++ utilisent des codes de
caractères connus et bien déterminés. En permettant tout autre
caractère (sauf les espaces et compagnie) dans les identificateurs
et commentaires, il n'y a rien de spécial à traiter... Mais je le
répète, je ne suis pas un spécialiste en compilation... (Par contre,
je réussis bien à analyser du code C++ (avec accents) pour pouvoir
imprimer les mots clefs en couleur, etc., dans un programme sur
lequel je travaille actuellement. Je ne sais pas pourquoi ce serait
plus compliquer pour un compilateur, mais je suis prêt à accepter
que c'est possible)

Il me semble même plus compliqué. Les concepteurs de lecteurs
Usenet essaient depuis longtemps de tenir compte de ce problème, ce
qui est AMHA plus récent pour les vendeurs de compilos C++.


Le problème de Usenet est l'encodage varié des caractères pour transmission.
Pour un compilateur sur une plate-forme donnée, ce
problème n'existe pas.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michel Michaud
Dans le message 4162ef49$0$29110$,
Le choix cornélien est parfois entre :
- Des noms de variables/types/fonctions bien choisis, pertinents,
marquants, mais en français
Et
- Des noms de variable pleins de contresens, de faux amis,... et en
anglais
Le problème n'est pas tant forcément dans le vocabulaire
informatique, maitrisé dans les deux langues, mais dans le
vocabulaire du domaine d'application.


Exactement. Et dans le vocabulaire hybride qui doit faire le lien
entre les deux.

Ton argument me fait aussi penser qu'avant de croire que nous
écrivons du bon code en anglais, il faut qu'un anglais le lise
et nous prouve qu'il a tout bien compris.

Écrire en anglais « au cas où » n'est donc pas nécessairement
satisfaisant... sauf pour celui qui l'écrit !

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Fabien LE LEZ
On Tue, 5 Oct 2004 22:10:46 -0400, "Michel Michaud" :

Si tu dois écrire du code dans ce but, c'est sûr que l'anglais est
un bon choix. Je ne crois simplement pas que ce soit un but général.


Plaçons-nous d'un autre point de vue. Je suis un chef de projet ou
chef d'entreprise, et je demande à quelqu'un (employé ou
sous-traitant) d'écrire un programme. Je sais pertinemment que dans
quelques années, il faudra reprendre ce code et le modifier ; je sais
aussi qu'il y a peu de chances pour que le programmeur d'origine soit
encore disponible. Et je n'ai aucune idée de la nationalité (ou la
langue maternelle) du prochain programmeur.
J'ai le choix de la langue, puisque c'est moi qui paie. Dois-je
choisir un développement en français ou en anglais ?


Note que je travaille dans une entreprise paumée au fin fond de la
Bretagne. Il y a peu de chances pour que mon employeur trouve
facilement un autre programmeur C++ dans la région ; le travail à
distance risque donc d'être la solution la plus pratique. Et une fois
admis le principe du travail à distance, les notions de position
géographique ou de nationalité n'ont plus grande importance.
D'ailleurs, un de nos collaborateurs réguliers (pas programmeur)
habite en Angleterre et ne parle pas un mot de français ; et la
dernière fois qu'on a fait appel à un designer, il s'agissait d'un
Britannique domicilié au Japon.
Du coup, l'idée d'un code (en production) lisible par des
non-francophones n'est pas qu'un sujet philosophique.
Et à tout ça il faut ajouter des marchés "spéciaux" (Japon ou Chine,
par exemple) où il vaut mieux avoir des collaborateurs (voire une
partie de la production) pour pouvoir entrer.


--
;-)

Avatar
Fabien LE LEZ
On Tue, 5 Oct 2004 22:48:09 -0400, "Michel Michaud" :

il faut qu'un anglais le lise
et nous prouve qu'il a tout bien compris.


Pourquoi un Anglais ?
Je vois très bien un monde où les seuls incapables de comprendre tous
les autres sont les gens dont la langue maternelle est l'anglais.


--
;-)

Avatar
Michel Michaud
Dans le message ,
Si un programmeur qui a programmé en français toute sa vie, se met
tout à coup à programmer en anglais (i.e. code+commentaires),
effectivement ses premiers programmes manqueront peut-être de
clarté. Mais on peut raisonnablement espérer qu'il s'améliorera


Comment ? Il faudrait qu'un programmeur anglophone soit derrière
lui pour lui indiquer ses erreurs... Si ce n'est pas le cas, tu
peux croire que ton anglais est bon et que tu fais du bon travail
alors qu'en réalité, toi seul pourra comprendre vraiment ton code.

avec le temps. De même, si un programmeur francophone a toujours
programmé en anglais, et décide tout à coup de programmer en
français, c'est pas sûr que le résultat soit génial non plus (au
début du moins).


Il faut assez bien maîtriser sa langue. C'est sûr.

Forcer l'anglais, c'est donc risquer de forcer un nivellement par
le bas à un endroit où ce n'est vraiment pas ce qu'on veut.


Ou forcer les gens à améliorer leur niveau d'anglais. Pour maîtriser
l'anglais écrit, il n'y a pas trente-six méthodes : il faut lire et
écrire beaucoup.


Et se faire relire et critiquer.


Par ailleurs,
penser que tout le code écrit doit pouvoir être lu par des
personnes qui ne parlent que l'anglais est aussi un leurre...


Effectivement, tout le code que j'écris ne devra pas forcément être
lu par un non-francophone. Mais comme je ne peux pas savoir à
l'avance quel code sera concerné, autant prendre les devants et
tout écrire en anglais, non ?


Non, pas si c'est un mauvais choix économique. On ne peut pas
généraliser.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/