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

Actualités Discussion :

Le pire bout de code que vous ayez vu

  1. #81
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 134
    Points
    134
    Par défaut
    [QUOTE=hermes1983;4765678]Alors moi, je pense que le truc le plus incroyable a été de chercher un jour sous quelle condition je recevais la valeur "E000:R" via un socket TCP. Je suis tombé sur le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        if(
            !checkTag(session->barcode, "TRANSIT") &&
            (
             (!strcmp(mode, F_IT) && ((g_comlabel!=0 && !checkTagValue(session->barcode, "TYPE", "COMMON")) || checkTag(session->barcode, "RELABEL")) && (session->isnprint || !checkTagValue(session->barcode, "CPEX", "N"))) ||
             (!strcmp(mode, "RELABEL") && !strcmp(szStr1, "FR")) ||
             (!strcmp(mode, F_IT) && checkTag(session->barcode, "REBUILD")) ||
             (g_comlabel && strcmp(mode, F_IT) && strcmp(mode, "RELABEL") && (!checkTagValue(session->barcode, "TYPE", "COMMON") /*|| checkTagValue(session->barcode, "EXPORT", "Y")*/) && (session->isnprint || !checkTagValue(session->barcode, "CPEX", "N")) ) ||
             (!g_comlabel && strcmp(mode, F_IT) && strcmp(mode, "RELABEL") && checkTag(session->barcode, "RELABEL")) ||
             (g_frinitcheck && !strcmp(mode, F_IT) && !checkTag(session->barcode, "COMIMP") && checkTagValue(session->barcode, "TYPE", "COMMON") && !frCheckRoute(session->barcode))
            ) 
          )
        {
            strcpy(data, "E000:R");
            // Autres trucs imbitables
        }
    OUAHHHHHHHHHHHHHHHHHHHH Mon préféré !!
    Ce que j'aime le plus, ce sont les commentaires de certaines conditions !!!! Totalement ouf !!!!!!

    Pas mieux

  2. #82
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Citation Envoyé par hermes1983 Voir le message
    J'avais écrit ça une fois sans faire gaffe en Java, et je m'en suis rendu compte dans le debugger. Maintenant, voilà pourquoi je me permets de faire un commentaire : le compilateur (Java 6) avait remplacé le == par un appel à equals sans me le dire, et le watch du debugger que j'avais fait par copier/coller n'avait pas fait cette substitution. Il m'en a fallu du temps pour comprendre ça...
    Interessant comme expérience, mais est-tu sûr de toi ? As-tu tenter de décompiler ton .class afin de voir ce qu'il se passe ? En fait je suis peut-être dans le faux mais j'ai jamais vu ce comportement à la compilation.

    Si on prend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class M {
        public static void main(String[] argv) {
            String a1 = "a", a2 = "a";
            System.out.println(a1 == a2);
        }
    }
    Après décompilation on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class M
    {
    
        public M()
        {
        }
    
        public static void main(String args[])
        {
            String s = "a";
            String s1 = "a";
            System.out.println(s == s1);
        }
    }
    Bien évidement ca renvoit true

    A noter que si dans le sout on fait un "a" == "a" sans variable intermédiaire, après la compilation on observera System.out.println(true);
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  3. #83
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par Théolude Voir le message
    Citation Envoyé par hermes1983 Voir le message
    Alors moi, je pense que le truc le plus incroyable a été de chercher un jour sous quelle condition je recevais la valeur "E000:R" via un socket TCP. Je suis tombé sur le code suivant :
    OUAHHHHHHHHHHHHHHHHHHHH Mon préféré !!
    Ce que j'aime le plus, ce sont les commentaires de certaines conditions !!!! Totalement ouf !!!!!!

    Pas mieux
    +1, il est génial ce code !

  4. #84
    Membre averti

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Points : 305
    Points
    305
    Par défaut
    Un de mes élèves m'a présenté une application avec cette portion de C++ qui m'a fait rêver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // On ouvre le fichier
    ...
    
    // On stocke les lignes dans un tableau
    i = 0;
    try {
        while (1) {
             tablo[i++] = fichier.readLine();
        }
    } catch (...) {
        // On fait le traitement du tablo
    }
    C'est propre et efficace !

    Laurent

  5. #85
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par monsieurben Voir le message
    J'ai bossé avec un presta tellement nul que je sais pas trop quel bout de code choisir.

    J'ai eu droit à celui-ci, plutôt pas mal :

    Dans une page de traitement d'un formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    
    $nom = post('nom');
    $prenom = post('prenom');
    [...]
    Et dans un fichier inclus, ladite fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    function post($var) {
    return $_POST['$var'];
    }
    .
    A part le nom de la fonction (je l'aurai appellé getParameter), je ne vois pas le problème. Je trouve cela justement élégant. Je ne suis pas expert PHP mais si un jour, on te dit que tu dois récupérer les variables en GET et non plus en POST. Tu modifies uniquement ta fonction post (oui le nom n'est pas terrible).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function post($var) {
    return $_GET['$var'];
    }
    Et tu n'as pas besoin de remplacer tes 5000 $_POST, si tu n'avais pas utilisé de fonction post. On peut aussi imaginer que tu veuilles faire un traitement particulier par la suite (que faire si la variable est null ou vide, tu peux alors faire un traitement générique).


    Donc je trouve cela justement élégant meme si ca parait lourd. La personne qui a développé a pensé à l'évolution future du produit.
    Si les maths sont compliques, que penser alors de la vie ?! (Von Neuman)

  6. #86
    Invité
    Invité(e)
    Par défaut
    Je rajouterai que si t'as des besoin de sécurité (injection sql, xss et autre), tu peut ajouter tes règles de sécu à cet endroit.

    A mon taf on avais ce genre de fonction, et ils ont développé 5-6 ans sans savoir ce qu'était l'injection sql. Un beau jour ce qui devait arriva : grosse injection de d'iframe dans nos champ texte on a réussi a récupérer la base et a se protéger en 1 demi journée et on est sur que c'est bon.

  7. #87
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par gailuris Voir le message
    Bonjour,

    ça m'a fait rire, j'ai eu le même, mais j'ai eu l'explication, quand on utilise checkstyle (ou d'autres outils surement), on peut interdire l'utilisation de "magic number" (de nombres utilisés en dur, en toutes logique si j'utilise le nombre 32 dans un programme il a une signification et je peux donc lui créer une constante ayant un nom qui ait un sens) mais certains développeurs ne comprenant pas pourquoi ils ont une erreur (ou un warning) et a qui on n'a pas expliqué les principes de bases de la qualité de codes font ce genre d'abbérations.

    C'est de la qualité pour faire plaisir à l'outil => on abouti à l'inverse d'un code de qualité.
    Effectivement, c'est très vraisemblablement à cause de checkstyle que le développeur a fait ce code car effectivement nous imposons des contraintes qualitatives basé sur cet outil.

  8. #88
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 21
    Points
    21
    Par défaut
    Ce n'est pas un bout de code, mais imaginez:
    • Un code en Java avec pakages/classes/methods (normal quoi)
    • Des classes longues et des méthodes longues (un classique)
    • Tout est en static même les référrences


    Dans ce cas et plus que jamais, il faut comprendre comment est-ce que l'interpréteur Java fonctionne et à quel moment précis il effectue tel ou tel action. Car on peut s'attendre dans ce cas à des NullPointerException en pagaille. Le développeur (il a fait ça tout seul) n'avait pas compris l'intérêt de la programmation objet. Il en était resté à Pascal et avait essayé de retrouver l'environnement Pascal dans Java.

    C'est vraiment horrible ! Comment peut-on faire un truc pareil ?

  9. #89
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par kerflyn Voir le message
    Ce n'est pas un bout de code, mais imaginez:
    • Un code en Java avec pakages/classes/methods (normal quoi)
    • Des classes longues et des méthodes longues (un classique)
    • Tout est en static même les référrences


    Dans ce cas et plus que jamais, il faut comprendre comment est-ce que l'interpréteur Java fonctionne et à quel moment précis il effectue tel ou tel action. Car on peut s'attendre dans ce cas à des NullPointerException en pagaille. Le développeur (il a fait ça tout seul) n'avait pas compris l'intérêt de la programmation objet. Il en était resté à Pascal et avait essayé de retrouver l'environnement Pascal dans Java.

    C'est vraiment horrible ! Comment peut-on faire un truc pareil ?

    clair comment as t'ont oser forcer un développeur a faire du java, quel torture que de faire du java ....
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  10. #90
    Membre confirmé Avatar de gmotw
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 384
    Points : 641
    Points
    641
    Par défaut
    Dans du code action script que je maintiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (condition)
    ;
    ;
    ;
    ;
    ;
    ;
    ...

    Je suis pas experte là dedans, mais c'est normal si je ne vois pas l'intérêt?

    Et sinon, j'avais vu de belles choses en java, mais mon esprit a effacé de lui-même les souvenirs pour éviter les traumatismes.
    THIS!IS!NOT!MY!COW!

    CECI!N'EST!PAS!MA!VACHE!
    (mais je persiste à dire que c'est moins classe en français )

  11. #91
    Membre averti

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Points : 350
    Points
    350
    Par défaut
    Oh, juste un petit truc sympa, en C++, mais sans utiliser la librairie standard. Presque du C en fait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    struct Object {
        Object *next;
        int value;
    };
    
    Object head = { NULL, 0 };
    
    void PushObject(Object *obj) {
        Object *tail = &head;
        while (tail.next != NULL)
            tail = tail.next;
        obj.next = NULL;
        tail.next = obj;
    }
    
    Object * PopObject() {
        Object *tail = &head;
        Object *prevtail = NULL;
        while (tail.next != NULL) {
            prevtail = tail;
            tail = tail.next;
        }
        if (tail != &head) {
            prevtail.next = NULL;
            return tail;
        }
        return NULL;
    }
    Bien que fonctionnel et sans bug (j'espère en fait, car j'ai réécrit ici du code vieux de 15 ans environ) le produit est sorti avec ça dedans.

    Pour rajouter un objet sur une pile, en parcourt toute la pile et on ajoute l'objet à la fin. Pour le retirer, on parcourt à nouveau toute la pile, et on l'enlève. Ce programmeur n'avait pas du tout compris l'intérêt des piles !

    Heureusement qu'il n'y avait pas trop d'éléments à empiler et dépiler ...

    Didier

  12. #92
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par dtrosset Voir le message
    Pour rajouter un objet sur une pile, en parcourt toute la pile et on ajoute l'objet à la fin. Pour le retirer, on parcourt à nouveau toute la pile, et on l'enlève. Ce programmeur n'avait pas du tout compris l'intérêt des piles !

    Heureusement qu'il n'y avait pas trop d'éléments à empiler et dépiler ...

    Didier
    euuh je ne comprends pas ce que tu veux dire : tu veux dire que le programmeur aurait du utiliser un conteneur de la STL plutot que des listes chainées du C ?

  13. #93
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Lung Voir le message
    Le compilateur Delphi interdit la modification de la variable utilisée par une boucle for.
    ok merci pour l'info

  14. #94
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    euuh je ne comprends pas ce que tu veux dire : tu veux dire que le programmeur aurait du utiliser un conteneur de la STL plutot que des listes chainées du C ?
    Je pense qu'il voulait dire que c'était plus rapide d'ajouter/retirer l'element en début de liste, plutot que d'aller systematiquement à la fin.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  15. #95
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les deux, je pense. Une std::stack< Object, std::list<Object> > aurait fait une pile chaînée mieux gérée...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #96
    Membre du Club
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    petite lecture ... si jamais personne ne l'a cité avant:
    http://fr.wikibooks.org/wiki/Program...code_illisible

  17. #97
    Invité
    Invité(e)
    Par défaut
    Un joli truc dans une vieille partie du système, pour appeler un webservcie externe :

    Post sur page asp => procedure stockée sql => procedure stockée clr => webservice interne (oui on s'auto appelle et vu que c'est dans 2 appli différentes, la requète http est faites ) => webservice externe

    ... quand tu connais pas le truc et que tu debuggue t'a l'impression de chasser le dahut.

  18. #98
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par galyathee Voir le message
    petite lecture ... si jamais personne ne l'a cité avant:
    http://fr.wikibooks.org/wiki/Program...code_illisible
    Ça a l'air sympa. Je connaissais How To Write Unmaintainable Code de Roedy Green, aussi.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #99
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 624
    Points
    624
    Par défaut
    Un ami vient de me dire ça sur msn :

    X dit:
    J'ai lu un test ya pas longtemps

    X dit:
    Une fonction qui prend vrai ou faux en paramètre, si c'est vrai il met ok dans un string, si c'est faux ko, et après il compte le nombre de k qui suivent un o pour savoir si les tests ont tous réussi.

  20. #100
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    change d ami et vite
    "vaste programme"

Discussions similaires

  1. Quel est le pire bout de code que vous ayez jamais écrit ?
    Par Gordon Fowler dans le forum Débats sur le développement - Le Best Of
    Réponses: 61
    Dernier message: 31/10/2011, 12h18
  2. Quelle est la plus grosse erreur de programmation que vous ayez jamais commise ?
    Par Katleen Erna dans le forum Débats sur le développement - Le Best Of
    Réponses: 138
    Dernier message: 03/08/2011, 23h38
  3. Petit bout de code que je ne saisis pas trop
    Par MeTaLCaM dans le forum C#
    Réponses: 5
    Dernier message: 03/12/2009, 00h07
  4. [Vos débuts] Quel est le premier langage que vous ayez appris ?
    Par Commodore dans le forum La taverne du Club : Humour et divers
    Réponses: 171
    Dernier message: 02/02/2007, 14h43

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