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. #1
    Expert éminent sénior

    Inscrit en
    Juillet 2009
    Messages
    3 407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 407
    Points : 149 059
    Points
    149 059
    Par défaut Le pire bout de code que vous ayez vu
    Le pire bout de code que vous ayez jamais vu
    Qui l'a fait ? Pourquoi ? Pourquoi était-il si horrible ?


    Il vous a fait rire. Ou hurler. Ou les deux.
    Vous n'en avez pas cru vos yeux et pourtant il était là. Et bien là. Un humain avait écrit ça.
    Il est resté dans votre mémoire comme le pire bout de code que vous ayez jamais vu.

    Quelque fois ce "pire code" n'est pas trop méchant. Il relève juste du non sens :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int length= 0;
    for(int idx = 0; idx < a.length; i++){
        length++;
    }
    System.out.println("La taille du tableau est : " + length);

    Ou comment calculer simplement la longueur du tableau à partir de la longueur ("a.length") qu'on a dès le départ...

    D'autres sont juste parfaitement inutiles :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Object toObject(String value){
           return (Object) value;
    }

    En Java tout est Object. Aucun besoin d'effectuer un cast donc.

    Mais ce code peut aussi aller jusqu'à vous hanter tant il est horrible. A se demander ce qui a bien pu passer par la tête du "créateur" de ce "monstre", voire si celui-ci sait dans quel langage il code :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void close(InputStream stream){
        stream = null;
    }

    InputStream est un flux vers une ressource. Pour le fermer, par exemple, il faut invoquer sa méthode close(), mais dans ce cas, le "créateur" s'est contenté de le mettre à null. Les développeurs Java seront d'accord pour admettre l'inutilité crasse de ce bout de code : les variables sont passées par copie de la valeur, donc ce ne sera "null" que dans la méthode.

    Allez une dernière pour la route (pardon pour les yeux) :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public int convert(String value){
          if(value == "0"){
                return 0;
          } else if (value == "1"){
                return 1;
          } else if (value == "2"){
                return 2; 
          } // jusqu'à 25 !
          else {
                return -1;
          }
    }

    Tout cela est faisable en une seule et simple ligne de Java (avec Integer.parseInt(String value) ).
    Mais le pire c'est que, en plus, la méthode de cet autre "créateur fou" ne fonctionne pas du tout. En Java, on ne peut pas faire value == "1" pour comparer sa valeur (il faut faire "1".equals(value) ).



    Invention de syntaxe, non-sens, aberration dans les raisonnements, vous avez déjà dû croiser ces codes cauchemardesques.

    Que vous soyez développeur JavaScript, PHP, Ruby, C, C++, C#, Assembleur, Pascal, Visual Basic, Perl, Python ou autres (désolé de ne pouvoir tous les citer), faîtes nous part de votre expérience de codeur : quel est le pire du pire que vous avez dû lire ?

    Une petite explication succincte pour que les non-spécialistes puissent également partager votre émois (qui je n'en doute pas est encore palpable aujourd'hui) est également la bienvenue.

    Quant à tous ces honteux bouts de Java reproduits ici, ils m'ont été communiqués par Baptiste Witch (responsable rubrique Java) qui se fera un plaisir de nous en livrer d'autres. Un grand merci à lui.

    Mais... je suis sûr que vous avez encore bien pire à raconter.

    Pas vrai ?


    Lire aussi :

    Les rubriques Java, Développement Web et Langages (actus, forums, tutos) de Développez.com

    Et pour se détendre après une journée bien chargée, la rubrique Humour Informatique

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 47
    Points : 51
    Points
    51
    Par défaut
    J'en ai vu un pas mal en php, fait par le responsable développement de ma boîte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (true) {
    } else {
    ...
    }
    Ce jour-là je me suis dis que finalement je n'étais pas le plus mauvais ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tout frais : en C++, sous un #ifdef _DEBUG, un if quelconque juste pour choper un point d'arrêt. Le gars s'étonne que le programme ne s'arrête pas... en Release-Debug.

  4. #4
    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
    Deux petits bouts de codes qui nous ont fait bien marré devant la machine a café, en C++

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bool marvin = true;
     
    switch( marvin )
    {
        case true : /* ... */; break;
        case false : /* ... */; break;
        default :
           /* ... */
    }
    deja faire un switch sur un booleen ca nous a surpris, mais quand on a vu le default

    et le second, un parcours de liste de la STL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    list<class> lst;
    
    while( i < lst.size() )
    {
        class tmp = lst.pop_front();
        /* ... traitement ... */
        lst.push_back();
    
        i++;
    }
    voila voila

    p.s. : heu faites pas trop gaffe a la syntaxe, ca fait un moment que j ai plus fait de C++ et je me suis pas amusé a compiler ces perles
    "vaste programme"

  5. #5
    Acropole
    Invité(e)
    Par défaut
    Dans le SDK de physX :

    Ca sert à rien, c'est pas trés pro, et ça vient de types à la pointe de la technologie, donc ça surprend.
    Ou alors c'est tellement génial que ca me dépasse.

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Un code javascript bien crade sur un template d'une page produit d'une boutique sous magento (php).

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    switch($('productCategory').innerHTML){
        case "Store" :
            $('storeimg').innerHTML="<img src='<?php echo $this->getUrl(); ?>media/store/<?php echo $productId; ?>.jpg' >";
        break;
        ...
        default:
            $('storeimg').innerHTML="<img src='<?php echo $this->getUrl(); ?>media/noproduct.jpg' >";
    }

    Il rend en partie statique la boutique (on doit manuellement ajouter un case à chaque création de nouvelles catégories).
    Il dépend du nom de la catégorie : lors d'une traduction ou d'un changement par le client, tout foire.
    Il y a surement d'autres choses à critiquer sur ce code mais je vais en rester là ^^.

  7. #7
    Membre actif Avatar de DrHelmut
    Homme Profil pro
    Software craftsman - JS, Java...
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Software craftsman - JS, Java...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Points : 215
    Points
    215
    Par défaut
    en java, fait par un 'expert' sur une appli que j'ai débogué il y a deux ans.

    Tellement énorme que je m'en rappelle encore, ça donnait à peu près ça :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public String removeForbiddenChar(String input) {
     
     String ouput="";
     String[] s = input.split(";");
     for(int i=0; i<s.length;i++) {
      s[i].replace(";","");
      output+=s[i];
     }
     return ouput;
    }

  8. #8
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Août 2008
    Messages : 148
    Points : 232
    Points
    232
    Par défaut
    En Java avec Struts, un getter void ... tellement idiot qu'on a perdu 15min pour savoir d'où venait le problème

  9. #9
    Invité
    Invité(e)
    Par défaut
    Si vous voulez vous marrez avec ce genre de chose :

    http://thedailywtf.com/Series/CodeSOD.aspx

    C'est parfois a mourrir.

    Code C# : 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
    29
    /// <summary>
        /// Convertit YES ou NO en booléen
        /// </summary>
        public static string boolToYESorNO(bool mon_booleen)
        {
            if (mon_booleen) return "YES";
            return "NO";
        }
     
        /// <summary>
        /// Convertit un booléen en 1 ou 0.
        /// Retourne 1 si le booléen est TRUE
        /// Retourne 0 si le booléen est FALSE
        /// </summary>
        public static int boolTo1or0(bool mon_booleen)
        {
            if (mon_booleen) return 1;
            return 0;
        }
     
        /// <summary>
        /// Convertit un booléen en YES ou NO
        /// </summary>
        public static bool YESorNOToBool(string YesOrNo)
        {
            if (string.IsNullOrEmpty(YesOrNo)) return true;
            if (YesOrNo.ToUpper() == "YES") return true;
            return false;
        }

    Donc a crée ces fonctions car a une epoque ou les dev ne connaissai pas le booleen de .net(migration depuis asp), ils utilisaient 1 ou 0 et parfois "YES" ou "NO" .... Donc il reste du code avec ce genre de chose ^^

  10. #10
    Membre actif
    Profil pro
    aucune
    Inscrit en
    Juillet 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Juillet 2007
    Messages : 134
    Points : 281
    Points
    281
    Par défaut
    pour ma part, durant mon stage j'ai dû débugger une petite appli qui avait coûtée plus de 50 000 € à la société. Vu la "qualité" du code, je croit que c'est bien plus en réalité...mais chut le boss n'aime pas admettre ses conneries.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(condition)
    {
        //blabla
    } else {
       //le même blabla que dans le if
    }
    sans oublier les Exceptions avalées, les erreurs dans le formules mathematiques etc...
    Edit: Je précise juste que l'application en question est une webapp Java et que la quasi totalité du code métier était écrit dans les servlets ainsi que le code HTML. Cette précision fait suite à une remarque que j'ai reçu par MP:

    J'ai travaillé dans une boite ou il fallait mettre un if pour que le temps machine soit identique lors de l'exécution à une autre boucle, et le code machine généré devait être aussi long. Ça ne veut absolument pas dire qu'il est mauvais. Par contre, votre message montre surtout clairement que vous n'avez aucune expérience en développement, ou pas assez pour éviter de critiquer ce genre de chose. A la limite, critiquer le fait qu'il n'y ait aucun commentaire expliquant cette technique ok.
    Si quelqu'un peut m'expliquer le lien avec mon exemple de code je suis preneur...car dans mon exemple je parle d'un code qui exécuté dans le if, ou dans le else revient au même code sans un if...si besoin est de mettre un if inutile, il aurait été plus élégant de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(condition); 
    //blabla qu'on écrit qu'une fois, et par conséquent qu'on débugge qu'une fois.

  11. #11
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 8
    Points
    8
    Par défaut On me dit que ce morceau de code fait quelque chose
    Je dis que le code suivant (qui peut etre tester dans plusieurs langages) ne fait rien, on me dit que la reponse est superficielle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    do break;
    while(true);
    do;
    while(false);
    if(true);
    if(false);
    else;
    for(;true; )break;
    while(true)break;
    Quelle serait la vrai reponse(peut-etre celle, profonde)

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par threshold Voir le message
    sans oublier les Exceptions avalées, les erreurs dans le formules mathematiques etc...
    En meme temp ce que tu mets dans le " Exceptions avalées, les erreurs dans le formules mathematiques,etc" tu en fera tout les jours , aucun développeur ne fait pas d'erreur. Si tu pense qu'un développeur est une merde des qu'il fait une erreur, même grossière ben bonne chance dans ton bureau

    Ce qui est amusant ce sont les erreurs plus que grossière, les truc limite qui sont des correctifs de bug par dessus des correctif de bug par dessus d'autre patch, du style if(5<8). Et ça peut etre pondu par n'importe que dev, tout dépend de sa fatigue / degré d'alcoolémie / cafeine / vacance etc ...

    "It's not a bug , it's a feature"

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    En php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($_POST as $cle => $val)
         eval("\$".$cle."=\"".$val."\";");
    J'ai sauté au plafond et je fais pas partie de l'équipe de dev web ...

  14. #14
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2008
    Messages : 71
    Points : 117
    Points
    117
    Par défaut
    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'];
    }
    La fonction ne servait strictement à rien, mais elle était consciencieusement appliquée à tous les champs de tous les formulaires (plus de 500 champs)...

    J'en ai plein d'autres comme ça :

    - Le CMS utilisait adodb pour accéder à la BDD. Par dessus, une classe d'abstraction stockée dans un Zend_Registry, et par dessus un ensemble de fonctions style dbQuery(), dbResult() pour faire abstraction de la classe d'abstraction.


    L'agence est une très grosse webAgency parisienne.

  15. #15
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Points : 109
    Points
    109
    Par défaut
    Comment faire une pause d'une seconde en java ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Calendar timer = Calendar.getInstance();
        timer.add(14,1000);
        int i=0;
        while (Calendar.getInstance().before(timer)) {
            i++;
            i--;
        }
    J'y trouve un coté artistique.
    Je m'étais demandé l'interet du i++ suivi de i--; peut être avait il peur d'un dépassement capacité du int

  16. #16
    Membre régulier Avatar de wizad
    Profil pro
    Étudiant
    Inscrit en
    Août 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 103
    Points : 100
    Points
    100
    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'];
    }
    La fonction ne servait strictement à rien, mais elle était consciencieusement appliquée à tous les champs de tous les formulaires (plus de 500 champs)...

    J'en ai plein d'autres comme ça :

    - Le CMS utilisait adodb pour accéder à la BDD. Par dessus, une classe d'abstraction stockée dans un Zend_Registry, et par dessus un ensemble de fonctions style dbQuery(), dbResult() pour faire abstraction de la classe d'abstraction.


    L'agence est une très grosse webAgency parisienne.
    En théorie ça ne doit même pas fonctionner : les variables entre guillemets simple ne sont pas interprété...
    Dev C#, PHP, Java

  17. #17
    Membre habitué Avatar de ke2007
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par Acropole Voir le message
    Dans le SDK de physX :

    Ca sert à rien, c'est pas trés pro, et ça vient de types à la pointe de la technologie, donc ça surprend.
    Ou alors c'est tellement génial que ca me dépasse.
    La même dans le code de font2ftt

  18. #18
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut
    Citation Envoyé par Acropole Voir le message
    Dans le SDK de physX :
    Je rigolais toujours en voyant ce genre de code jusqu'à y à quelques mois où j'ai repris une application que j'ai développé y à presque 1,5 ans maintenant et ou j'ai écrit presque la même chose, mais en pire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(1 == 1) {
        // PAS BIEN !!!
        [...]
    }
    else {
        [...]
    }
    Je me demande bien ce qui à pu me traverser l'esprit quand j'ai écrit ça! J'ai même honte de le poster ce soir...
    Jérémy
    Ingénieur Conception et Développement

  19. #19
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Une fois j'ai tout de même vu que mon voisin de bureau cherchait à faire passer le contenu d'une table contenant, au bas mot, 25 colonnes et environ 1 000 000 de lignes en paramètres GET d'une page PHP...

    Le tout, pour pouvoir trier et afficher le contenu de la dite table sur une page...

    Je l'ai arrêter avant qu'il ne teste.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Difficile de trouver le pire tant j'en vois tous les jours ...

    je me rappelle d'une action struts avec une méthode de plus de 5000+ lignes en un seul bloc, non commenté, mal indenté, avec des noms de variables incompréhensibles et les attributs des objets réutilisés pour faire plein de choses ... Imaginez qu'en plus celui qui a développez ça était un peu "artiste" et là ...

    Et imaginez que dans ce code, vous savez qu'il y a un bug et c'est à vous qu'incombe le privilège de le corriger... ça doit certainement rappeler des souvenir à des gens ...

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, 13h18
  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: 04/08/2011, 00h38
  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, 01h07
  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, 15h43

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