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

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

###raw>template_hook.ano_emploi###