IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

écriture concise c'est beau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut écriture concise c'est beau
    Bonjour,
    Avant de me lancer dans l'écriture d'une nième fonction,
    est-il possible de réduire ces 4 lignes 5,7,9,11 en une(à part les ajouter les unes au bout des autres!!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    string fonctionG(string H)
    {
    //ligne d'initiation de la fonction A
    string utilPrm,prmUtiUn,prmUtiDeu,prmUtiTroi,prmUtiQuat;
    //la fonction A
           utilPrm=FcPrmUti(prmUtiUn,prmUtiDeu,prmUtiTroi,prmUtiQuat);
    //lignes d'initiations de la fonction B
    string Mop,mopUn,mopDeu,mopTroi,e="e!",z="z!";
    //la fonction B
          mopUn=prmUtiDeu;mopDeu=e+__func__; Mop=FcMo(mopUn,mopDeu,mopTroi);
    return H;
    }
    elles sont contenues dans une fonction par exemple.
    les inclure dans une fonction C va quand même se terminer par 2 lignes:bénéfice 4 lignes origine = 2 lignes finales,maigre gain.
    Si pas possible c'est pas grave.
    A+++ en attendant plus chaleureux.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    ton écriture est belle à tes yeux, mais absolument illisible.
    Le H passé en paramètre (par copie) n'est jamais utilisé, et lui-même retourné par copie à la fin.

    Du coup, une simplification fort simple est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string fonctionG(string& /*H*/)
    {
      return "";
    }
    On trouvera difficilement plus court comme simplification amha !
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut
    Sachez que pépère n'a jamais réussi à faire fonctionner volontairement les return.Il en faut toujours certes.Je les subissaitJ'ai toujours vu dans mes parcours Internet ou livresques que 0 ou XYZ ou des XYZ+ABC.
    Mais je n'ai jamais vu "" et surtout NI Y JAMAIS PENSE!!!
    Je vais généraliser cette écriture.Merci.
    Et puis ma question de départ tombe à l'eau.
    Je mets en tête de code les lignes 5 et 9 et selon nécessité locale les lignes 7 et 11(j'ai modifié la présentation que je vous avait fait).
    Merci pour tout à tous lecteurs et contributeurs.
    sen

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par senvedgi Voir le message
    Sachez que pépère n'a jamais réussi à faire fonctionner volontairement les return.
    Comment t'en sors-tu ..?
    Un return, comme son nom l'indique, sert à ... retourner une valeur.

    Citation Envoyé par senvedgi Voir le message
    Il en faut toujours certes.
    Non ils ne sont pas obligatoires, on en met quand on en a besoin.

    Citation Envoyé par senvedgi Voir le message
    Je les subissaitJ'ai toujours vu dans mes parcours Internet ou livresques que 0 ou XYZ ou des XYZ+ABC.
    Mais je n'ai jamais vu "" et surtout NI Y JAMAIS PENSE!!!
    Cette écriture ou une autre n'est pas là par magie mais parce qu'elle correspond à ce que je souhaite faire (dans ton cas : strictement rien)

    Citation Envoyé par senvedgi Voir le message
    Je vais généraliser cette écriture.Merci.
    Tu comptes généraliser quoi là ?

    Citation Envoyé par senvedgi Voir le message
    Et puis ma question de départ tombe à l'eau.
    Je mets en tête de code les lignes 5 et 9 et selon nécessité locale les lignes 7 et 11(j'ai modifié la présentation que je vous avait fait).
    Merci pour tout à tous lecteurs et contributeurs.
    sen
    Ta question initiale revient à "j'ai 4 lignes dans une fonction qui ne fait rien du tout, comment je peux les simplifier ?"
    Ta fonction ne fait rien : elle devrait même pas exister. Tu peux purement et simplement la supprimer de tout ton projet.
    Sauf, et j'ai un plus que sérieux doute à cette alternative, si FcPrmUti et FcMo ont un effet de bord.
    Et encore... FcPrmUti utilise (agit sur ? j'en doute) des chaînes vides et retourne une chaîne jamais utilisée, FcMo retourne une valeur jamais utilisée et utilise (agit sur ? j'en doute toujours) des chaînes fixes.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut
    oh!là!On se calme.
    1)Je mets généralement un return vers le premier string:return QQchoseUn si la fonction contient ... (string QQchoseUn...
    Et çà marche!
    Si la fonction permet de trouver plusieurs résultats l'un sort avec return QQchoseUn l'autre avec &QQchoseDeu ou avec le nom de la fonction.
    Et çà marche!
    Maintenant je vais utiliser return ""; et tout faire sortir par des &..Un ou &..Deu
    2)comment peux-tu m'expliquer ce que fait le code que j'ai fourni?Ce que j'ai fourni est S.I.M.P.L.I.F.I.E. à l'extrême.
    Rassure-toi mes deux fonctions sont fonctionnelles.L'une contient des paramètres généraux (Prm..)pour le programme final.
    L'autre permet de signaler le début ou la fin d'une fonction lors de la mise au point du programme(Mop..) et de l'inscrire à partir d'une colonne mise en paramètre et aussi de signaler des repères d'exécutions.
    Sur l'écran on voit:
    ------------------
    e:FcFonctionA
    (...)
    lignA198
    (....)
    lignA205
    (...)
    z:FcFonctionA
    e:FcFonctionB
    (...)
    lignB300
    (...)
    z:FcFonctionB
    -----------------
    Et j'ai construit tout çà pour trouver où le programme buggait.
    Je cherchais aussi à en simplifier l'écriture mais je me suis apperçu que
    les 2 lignes d'init. 5 et 9 étaient à placer au début
    puis les lignes 7 et 11 localement.
    3)la dernière partie de ton message est très désagréable et incompréhensible.
    J'opterai pour pleine de fautes de frappes.."effet de bord" ici?? "chaines inutilisées"??elles sont en réserve!!
    Quand on ne comprend pas on demande des explications avant de balancer des jugements péremptoirs.
    Sen.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par senvedgi Voir le message
    oh!là!On se calme.
    Je me demande lequel des 2 devrait suivre ce conseil..

    Citation Envoyé par senvedgi Voir le message
    1)Je mets généralement un return vers le premier string:return QQchoseUn si la fonction contient ... (string QQchoseUn...
    Et çà marche!
    Si la fonction permet de trouver plusieurs résultats l'un sort avec return QQchoseUn l'autre avec &QQchoseDeu ou avec le nom de la fonction.
    Et çà marche!
    Maintenant je vais utiliser return ""; et tout faire sortir par des &..Un ou &..Deu
    Tu fais donc n'importe quoi et sembles en être content. Si lorsqu'on te signale que tu fais n'importe quoi tu rétorques juste "non mais ça marche", alors que c'est clairement n'importe quoi : enjoy.

    T'es au courant qu'une fonction n'est pas obligée de retourner quelque chose ?
    Et surtout pas un std::string.
    Un indice comme ça : void.

    Citation Envoyé par senvedgi Voir le message
    2)comment peux-tu m'expliquer ce que fait le code que j'ai fourni?Ce que j'ai fourni est S.I.M.P.L.I.F.I.E. à l'extrême.
    Demain va chez ton garagiste, présente-lui que le volant en lui disant que ta voiture fait un bruit au démarrage; tu m'indiqueras sa réponse.

    Citation Envoyé par senvedgi Voir le message
    Rassure-toi mes deux fonctions sont fonctionnelles.L'une contient des paramètres généraux (Prm..)pour le programme final.
    L'autre permet de signaler le début ou la fin d'une fonction lors de la mise au point du programme(Mop..) et de l'inscrire à partir d'une colonne mise en paramètre et aussi de signaler des repères d'exécutions.
    Sur l'écran on voit:
    ------------------
    e:FcFonctionA
    (...)
    lignA198
    (....)
    lignA205
    (...)
    z:FcFonctionA
    e:FcFonctionB
    (...)
    lignB300
    (...)
    z:FcFonctionB
    -----------------
    Et j'ai construit tout çà pour trouver où le programme buggait.
    On peut aussi utiliser un debuger en pas-à-pas. Mais on a tous déjà debugué au printf. Sur 300 lignes ça reste faisable et acceptable de recompiler.

    Citation Envoyé par senvedgi Voir le message
    Je cherchais aussi à en simplifier l'écriture mais je me suis apperçu que
    les 2 lignes d'init. 5 et 9 étaient à placer au début
    puis les lignes 7 et 11 localement.
    Effectivement je ne peux pas deviner tes problèmes d'algorithmique sur 4 lignes qui ne font rien.

    Citation Envoyé par senvedgi Voir le message
    3)la dernière partie de ton message est très désagréable et incompréhensible.
    J'opterai pour pleine de fautes de frappes.."effet de bord" ici?? "chaines inutilisées"??elles sont en réserve!!
    Quand on ne comprend pas on demande des explications avant de balancer des jugements péremptoirs.
    Sen.
    J'opterais pour une méconaissance (importante) du développement et du C++ en particulier. Etant donné qu'il y a absolument aucune faute de frappe flagrante qui empêche sa compréhension.

    Ton message original est bancale, et tu l'admets résolu quand je t'indique que H est inutile et supprime le contenu de ta fonction.
    Qui est incompréhensible là...


    Mais quitte à ne pas vouloir apprendre ou de conseils, pas de problème je n'y reviendrai plus. Garde tes mauvaises habitudes et tes fonctions qui retournent des string.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut ... mais souvent dangeureux...
    Salut,

    Il ne faut pas confondre "écriture concise" et obfuscation !!!

    Limiter le nombre de lignes dans une fonction ne sert souvent... qu'à rendre le code plus difficilement compréhensible ("obfusqué") sans apporter de réel bénéfice en terme d'exécution.

    Un simple exemple tiré de ta première ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string utilPrm,prmUtiUn,prmUtiDeu,prmUtiTroi,prmUtiQuat;
    C'est très bien, cela tient sur une seule ligne de code, mais...
    tu n'as strictement aucune différence, en terme de performances, entre cette ligne de code et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string utilPrm;
    string prmUtiUn;
    string prmUtiDeu;
    string prmUtiTroi;
    string prmUtiQuat;
    Par contre, à la lecture (et il faut savoir qu'un code est beaucoup plus souvent lu que compilé ), l'utilisateur saura directement de combien de chaines de caractères il dispose et ne risquera pas d'en oublier une qui est "cachée" entre deux autres.

    Sous prétexte de concision, tout ce que tu as réussi à faire avec le code tel que tu présentes, c'est à le rendre plus difficile à comprendre et à suivre!

    Et il ne faut pas croire que ce n'est le cas que "pour les autres", car le premier des autres qui devra relire le code, c'est sans doute toi, plus tard, parce qu'il faudra apporter des modifications ou corriger un bug.

    Le problème, c'est que, le temps ayant passé, tu ne te souviendras plus de la logique que tu voulais mettre en oeuvre, et que si le code n'est pas "directement compréhensible" sans devoir commencer par traquer les ",", tu vas perdre énormément de temps pour rien !

    Honnêtement, je connais des chefs de projets qui ne se gèneraient pas pour virer un fichier contenant un tel code (ou pour revenir à la version précédante) et pour t'obliger de le réécrire de manière lisible.

    Maintenant c'est toi qui vois, mais, avant de vouloir faire un code concis, veilles :
    1. à faire en code lisible
    2. à faire un code qui compile (en gardant 1)
    3. à faire un code qui fait ce que tu attends de lui (en gardant 1 et 2)
    4. à optimiser tes algorithmes en terme de performances (en gardant 1, 2, et 3)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/09/2006, 18h14
  2. Réponses: 11
    Dernier message: 05/03/2006, 17h02
  3. [sbadecoder a dit].. C'est quoi pour vous un beau programme?
    Par seb.49 dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 13/02/2004, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo