CALCUL DU PGCD : EXEMPLE DE RÉCURSIVITÉ

Signaler
Messages postés
259
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2021
-
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54376-calcul-du-pgcd-exemple-de-recursivite

Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
>> Hors je sais les utiliser nuance
Tu ne savais même pas qu'un namespace pouvait être limité, donc niveau crédibilité... Effectivement nuance !
C'est difficile de parler avec toi, tu ne sors aucun argument, ni exemple (pourtant j'ai parlé d'un exemple véritable, pas de question ?).
Tu ne cesses de répéter en boucle: Nan mais moi, j'ai pas eu de problème => donc personne n'a de problème => aucun problème ne peut avoir lieu.

>> Mais c'est pas pour ça que je vais aller faire ***** les autres qu'ils n'ont pas la bonne pratique.
Je m'en moque complètement que tu utilises de mauvaises pratiques tant que:
- On ne bosse pas ensemble sur un même projet.
- Ça ne soit pas montré publiquement, à tord, aux débutants comme une bonne pratique.

>> c'est ce qui est fait partout et enseigné partout
Absolument pas. J'ai quelques exemples, de tête ou c'est correctement enseigné. (Pas de pub, mp si tu veux les noms).

>> Si les professionnels continue d'apprendre l'usage du using namespace
S'il continue de le proscrire tu veux dire ? Bizarrement, j'ai toujours bossé avec des gens qui l'évitaient...

>> en utiliser qu'un par exemple, celui dont on a le plus besoin, ce que je fais
Aucun rapport. Le problème le plus vicieux, n'est pas lié au nombre de namespace utilisé. C'est essentiellement le masquage silencieux de fonction qui peut faire mal...

>> J'ai donc appris une pratique parfaitement fonctionnelle et ne posant aucun problème [...] Donc ma pratique est parfaitement bonne
Et encore un très joli sophisme :p (Tu as fait des études littéraires ?)
http://fr.wikipedia.org/wiki/Sophisme

>> Ce que je veux dire c'est que oui il est mieux de limiter
Pffou on avance un peu.

>> j'ai fait le choix de la portée globale ce que l'on déconseille comme on déconseille d'avoir dans sa classe les variables en public ou protected si il y en a pas besoin dans ce cas là.
Et oui, les deux sont déconseillés pour une bonne raison... Encore une fois, tu es libre de faire ce que tu veux. Mais ne me reproche pas de le signaler.

>> mais ma façon de faire ne pose aucun problème et n'est pas forcément à proscrire
Encore, une fois, tombe sur une erreur vicieuse de masquage en production, et après on en reparle.

>> Tant que tu utilises correctement pas de soucis
Je dirais même tant qu'il n'y a pas de problème, il n'y a pas de souci ! D'ailleurs s'il n'y a pas de souci, il n'y a pas de problème. CQFD.
Plus sérieusement, mieux vaut prévenir que guérir. Ne pas utiliser de "using" à l'arrache, c'est ajouter une couche de protection. Tu peux ne pas l'utiliser, mais c'est une bonne pratique de l'avoir. Pas question que je n'indique pas cette possibilité aux débutants.

>> D'ailleurs en parlant des variables globales, elles sont à proscrire mais pourtant on retrouve des cas où elles sont utilisées, pas forcément en C++ mais en C c'est chose courante, on va pourtant pas aller faire notre cirque qu'il faut pas s'en servir.
Encore une fois, ce n'est pas parce que tu l'as vu une fois dans un code, que c'est bien. Je suis prêt à voir le code dont tu parles et à te montrer qu'une variable globale peut toujours s'éviter. Voir à te réécrire le code pour l'éviter.
C'est une erreur que je t'aurais fait remarquer si tu l'avais faite.

>> [variables globales] mais en C c'est chose courante,
Oo ! Mais dans quelle école tu étudies ! (Non non, ne donne pas de nom, c'est une question rhétorique).

>> contrairement aux variables globales qui elles sont communes à tout le projet.
Les variables globales sont normalement limitées à un fichier de code, il faut utiliser explicitement une directive (extern) pour pouvoir l'utiliser dans un autre fichier de code. *A moins* que tu mettes aussi tes variables globales à l'arrache dans un header ? (Autre débat ?)

>> Un cas où mon using pose pas de soucis
Ce n'est pas le cas. Il y a bien souci pédagogique.

>> je ne vois pas pourquoi on viendrait critiquer et faire son cirque.
Je te rappelle que c'est toi qui est venu "faire ton cirque". Tu n'aimes apparemment pas la critique... Quant à "critiquer", tu es sur une section dédiée à la critique ! Évidemment que ton code est critiqué.

>> Si les professionnels continue d'apprendre l'usage du using namespace, peut être ont ils l'intelligence d'expliquer justement les risques et quoi faire pour éviter le problème
Tout à fait d'accord. Pour éviter les problèmes, cf mon lien. Lors de formation ou de cours, j'explique toujours cette notion à mes élèves, appuyant effectivement sur les risques et comment les éviter.

>> (je demanderais à mon frère qui est développeur de métier ce que son prof a dit à ce sujet).
J'avoue tu m'as bien faire rire sur ce coup :p
De mon côté, je demanderais à la cousine du beau frère d'un ami dont le copain de sa soeur est "développeur de métier", histoire de voir ce que le grand père de son prof aurait pu dire à ce sujet.
Messages postés
259
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2021
4
Pour qu'il y est un vrai problème de namespace, il faut ne pas les utiliser correctement. Hors je sais les utiliser nuance. Ce n'est pas parce que j'utilise les namespace en portée globale que forcément j'aurais un code qui déconnera, il déconnera si mon namespace est en conflit et c'est pour ça que dans le doute quand j'ai deux namespace j'en utilise qu'un seul, l'autre j'ai pris pour habitude de l'utiliser directement en préfixe mais maintenant que je sais qu'on peut limité le using à une classe ou fonction, je pourrais à loisir utiliser les using namespace et clarifier donc encore plus mon code (de mon point de vue). Mais c'est pas pour ça que je vais aller faire ***** les autres qu'ils n'ont pas la bonne pratique.

Oui un débutant voyant mon code utilisera les using namespace comme je le fais, c'est ce qui est fait partout et enseigné partout, c'est à la personne ensuite si elle tombe sur un problème, d'aller se renseigner avec la doc c'est tout. C'est pas comme si on lui foutait entre les main un code complexe et qu'on lui demandait de l'utiliser, là se renseigner sur les using namespace c'est fait en quelques cliques.

Si les professionnels continue d'apprendre l'usage du using namespace, peut être ont ils l'intelligence d'expliquer justement les risques et quoi faire pour éviter le problème (je demanderais à mon frère qui est développeur de métier ce que son prof a dit à ce sujet).

Au début moi j'ai appris les using namespace comme ce que je fais, bien vite j'ai appris ensuite les risques de conflits et comment gérer dans ce cas là (en utiliser qu'un par exemple, celui dont on a le plus besoin, ce que je fais ; j'avais pas appris la limitation de portée du using namespace). J'ai donc appris une pratique parfaitement fonctionnelle et ne posant aucun problème et qui correspond au site que j'ai cité : soit ne pas utiliser, soit utiliser uniquement ceux ne créant pas de conflit ou alors limiter la portée. Donc ma pratique est parfaitement bonne, simplement j'ai fait le choix de la portée globale ce que l'on déconseille comme on déconseille d'avoir dans sa classe les variables en public ou protected si il y en a pas besoin dans ce cas là.

Ce que je veux dire c'est que oui il est mieux de limiter, mais ma façon de faire ne pose aucun problème et n'est pas forcément à proscrire, ce qui est à proscrire c'est la mauvaise utilisation. Tan que tu utilises correctement pas de soucis et que je sache le using namespace en global a toujours une portée limitée : le fichier (a ce que j'en avais constaté un jour où j'ai oublié de mettre le using namespace dans un des autres fichiers du projet), contrairement aux variables globales qui elles sont communes à tout le projet.

D'ailleurs en parlant des variables globales, elles sont à proscrire mais pourtant on retrouve des cas où elles sont utilisée, pas forcément en C++ mais en C c'est chose courante, on va pourtant pas aller faire notre cirque qu'il faut pas s'en servir.

Un cas où mon using pose pas de soucis, je ne vois pas pourquoi on viendrait critiquer et faire son cirque. De plus mon code n'est pas là pour parler des using namespace mais apprendre à faire une fonction récursive et pour cela j'ai pris l'exemple du calcul du PGCD puisque ceci est très simple à faire.
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
>> Je veux pas te contredire mais limiter les namespace à une seule fonction j'en vois pas l'intérêt autant dans ce cas là ne pas s'en servir tout simplement.
Raison pour laquelle je ne l'utilise quasiment pas. Ce n'est pas pour autant inutile. Ça m'a quand même bien servi pour du boost::spirit !

>> Je n'ai pas d'expérience professionnelle, mais je constate avec était en relation avec des professionnels et ils utilisent les namespace comme moi et n'ont aucun problème.
C'est bien ce que je pensais. Je te propose d'en reparler dans quelques années. Il y a un fossé entre expérience professionnelle et "j'ai un ami d'un ami qui m'a dit que".

>> Pour une classe je suis d'accord mais là c'est inutile.
Une bonne pratique c'est toujours une bonne pratique. Tu aurais pu utiliser une variable globale dans un code de deux lignes, je t'aurais fait la remarque qu'une variable globale est à proscrire et au pire à être contrôlé via un singleton. Et bien ici, c'est pareil. Ce n'est pas parce que le code est petit que la mauvaise pratique devient bonne.

>> tu dis bien : "n'utilisez pas using namespace, jamais !" et pourtant sur la page tu montres l'utilisation du using namespace.
Je te cite la première phrase de mon paragraphe qui porte dessus: "Maintenant que l'on a vu, pourquoi ne jamais utiliser de clause using namespace, voyons comment remplacer celle-ci de manière intelligente."
En quoi je me contredis ? C'est un peu la phrase d'amorce si tu préfères. Mon argumentation reste claire, et le plan est suivi.

>> Je cite : "Il est conseillé de limiter l'utilisation de using namespace car cela fait tout simplement perdre l'utilité des namespaces. En particulier, son usage est à proscrire dans les fichiers d'en-tête, ainsi que dans les cas où il
>>génère des conflits avec d'autres namespaces. On peut pour cela restreindre la portée de la clause using à un bloc en particulier :"
Heu... C'est *exactement* ce que je dis !
Oui, l'usage d'un using namespace fait perdre l'utilité d'un namespace !
Oui, c'est à proscrire dans une portée globale !
Oui, il faut restreindre la portée d'une clause using à un bloc particulier !
Je suis totalement en phase avec le site que tu viens de me donner. Citation qui appuie totalement mon argumentation.

>> Déjà ici il disent qu'il est conseillé de limiter son utilisation, toi tu interdis, voila déjà une sacrée nuance
Limiter ou interdire, il n'y a ici pas de différence. J'aurais pu le formuler: vous pouvez l'utilisez, tout comme vous pouvez vous tirer une balle dans le pied. Si tu n'as pas saisi ce que disait le site: Il entendent par limiter == à ne pas faire. Tout comme il conseille de "limiter" l'usage de variable globale...
Ex: http://cpp.developpez.com/faq/cpp/?page=classes#CLASS_singleton

Je cite: "Pour limiter le nombre d'instances d'une classe,"
Un singleton, par définition, interdit de multiple instance d'une classe (une seule possible). Limiter veut bien dire interdire.

On pourrait pinailler sur les mots encore longtemps... Mais si tu en es à critiquer le choix des mots et leurs sens dans un contexte donné => Manque d'argument :p ?
(Mais tu as réussi à me citer un site qui appuie ce que j'explique pour essayer de me contredire, il fallait le faire !)

>> Hors que je sache mon code ne pose aucun problème de conflit, conclusion mon usage du using namespace ne pose pas de problème et je peux donc l'utiliser comme ça.
Joli sophisme, mais ça ne prend pas.
Moi aussi je peux en faire:
- Je peux utiliser une variable globale dans un code de deux lignes.
- Ça va parfaitement marcher
- Donc les variables globales ne sont pas un problème

Encore une fois, quelque soit la taille d'un code, je signalerais toujours une mauvaise pratique.

>> Après oui il est conseillé d'en limiter la portée, mais là quel en aurait été l'intérêt ? Pour une classe je suis d'accord mais là c'est inutile.
Si tu l'avais fait, un débutant qui lit ton code se poserais la question: Tiens pourquoi a-t-il fait ça ? Et il se renseignera un minimum. Si tu ignores constamment toutes bonnes pratiques par flemme, ça n'aide pas les débutants. La preuve, tu ne savais pas qu'on pouvait limiter la portée d'un namespace, avant que j'en parle !

>> Pour l'instant donc tu m'as rien donné comme argumentation qui tend sur la non utilisation ou son utilisation en portée limité
C'est une blague ou de la simple mauvaise foi ? J'ai décrit toute mon argumentation dans le lien donné, ainsi que des exemples qui mènent a des erreurs d'exécution et de compilation. Je ne peut être plus exhaustif. L'un des exemples, bien que simplifié, est un vrai exemple arrivé en production lorsque l'on m'a demandé d'incorporer un ancien code dans une solution plus grosses. Un bug dû à un namespace, a fait perdre une sacré somme d'argent à l'entreprise. Je peux t'assurer que ça fait réfléchir (pourtant il n'y avait pas de using namespace dans le header, mais il y en avait dans le code...). Description détaillé en mp si tu le désires (je n'ai pas le droit de trop détailler sur un forum public pour des raisons évidentes).

>> Est-ce que j'ai fait n'importe quoi ?
Oui. Mais tu es libre de le faire.

>> car aucuns conflits et pas de présence dans un header.
Je te souhaite, dans ta future vie professionnelle, de ne pas tomber sur un vrai gros projet avec un souci de using namespace. Là tu comprendras (malheureusement il faut souvent en passer par là).
Messages postés
259
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2021
4
Je veux pas te contredire mais limiter les namespace à une seule fonction j'en vois pas l'intérêt autant dans ce cas là ne pas s'en servir tout simplement. Ton argument me semble bancale. D'autres part, ton lien j'ai pas pris la peine de le regarder car j'ai pensé à un lien comme ceux que j'ai eux. Ceux que j'ai eux ne parlaient absolument pas de limiter la portée du using namespace, je ne savais même pas que c'été possible.

Je n'ai pas d'expérience professionnelle, mais je constate avec était en relation avec des professionnels et ils utilisent les namespace comme moi et n'ont aucun problème.

Ma façon de faire n'est peut être pas des meilleurs, mais un code aussi minimal n'aura pas de soucis avec le using namespace d'ailleurs il m'a jamais posé de problèmes. Venir dire que c'est pas le bon moyen de faire quant on poste un gros truc OK, mais là venir critiquer un code dès plus minimal ce fut la goutte qui a fait débordé le vase.

Pour information, tu sais que ce n'est pas un lien trouvé sur le net, que tu as rédigé cet article et dedans tu dis bien : "n'utilisez pas using namespace, jamais !" et pourtant sur la page tu montres l'utilisation du using namespace. Oui au sein d'une fonction donc à portée limité mais tu l'utilises quand même ce qui est en totale contradiction avec ta phrase du début de l'article.

Ensuite un using namespace dans une fonction quel en est l'intérêt ? Autant préfixé tout simplement.
Autre chose, information provenant de ce site en qui j'ai pleinement confiance : http://cpp.developpez.com/faq/cpp/?page=namespace

Je cite : "Il est conseillé de limiter l'utilisation de using namespace car cela fait tout simplement perdre l'utilité des namespaces. En particulier, son usage est à proscrire dans les fichiers d'en-tête, ainsi que dans les cas où il génère des conflits avec d'autres namespaces. On peut pour cela restreindre la portée de la clause using à un bloc en particulier :"

Déjà ici il disent qu'il est conseillé de limiter son utilisation, toi tu interdis, voila déjà une sacrée nuance. Ensuite il est dit que c'est à proscrire dans les header, donc en global dans le fichier source on peut l'utiliser en tout cas d'après cette phrase. Ensuite il est dit aussi de l'éviter dans le cas où cela génère des conflits avec d'autres namespace, on en revient donc à ce que je disais : savoir utiliser de façon intelligente les using namespace, un programme en utilisant beaucoup doit choisir celui ou ceux qui seront à utiliser, par exemple ceux dont on a le plus besoin. Dans le cas donc des conflits, on peut restreindre à un bloc particulier.

Hors que je sache mon code ne pose aucun problème de conflit, conclusion mon usage du using namespace ne pose pas de problème et je peux donc l'utiliser comme ça. Après oui il est conseillé d'en limiter la portée, mais là quel en aurait été l'intérêt ? Pour une classe je suis d'accord mais là c'est inutile.

Et comme je m'en sert pas dans les fichiers d'en-têtes, toujours aucun problème.

Pour l'instant donc tu m'as rien donné comme argumentation qui tend sur la non utilisation ou son utilisation en portée limité. On en revient donc à ce que j'ai dit : savoir l'utiliser et pas faire n'importe quoi. Est-ce que j'ai fait n'importe quoi ? Non car aucuns conflits et pas de présence dans un header.
Afficher les 18 commentaires