Developpez.com

Le Club des Développeurs et IT Pro

Programmation : Le pire bout de code que vous ayez vu

Qui l'a fait ? Pourquoi ? Pourquoi était-il si horrible ?

Le 2009-11-03 17:21:58, par Gordon Fowler, Expert éminent sénior
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 :
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 :
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 :
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 :
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
  Discussion forum
495 commentaires
  • kolodz
    Modérateur
    Voici comment on vérifie les codes postaux sur le site que je maintiens :
    Code SQL :
    select * from code_posteau
    Le résultat de la requête est utilisé pour pour faire ceci :
    Code php :
    if(array_key_exists($codepostal,$list))

    Étant donné la lenteur d'affichage du site associé, il a été décidé de mettre en cache le résultat de la requête...

    La personne qui a produit ce code était payé plus cher que moi.
    Et avait les droits d’accès à toutes les machines.

    3 semaines que j'ai vue l'erreur, j'ai toujours pas eu le droit de faire la modification sur la prod.

    Cordialement,
    Patrick Kolodziejczyk.
  • Lyche
    Expert éminent
    Et bien voilà, je porte ma contribution.. ceci provient d'un site en ASP 3.0 (oui c'est super vieux ) et je suis tombé, entre autre, sur ce code

    Code ASP :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      
    		pays2 = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche2("pays"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-")) 
    		region2 = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche2("region"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-")) 
    		dept2 =LCase( Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche2("dept"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-"), "/", "-")) 
    		ville2 = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche2("ville"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-"), "/", "-")) 
    		nom2 = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche2("nom"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), "/", "-"), " ", "-"), "’", "-"), "'", "-"), """", ""), "&", ""), "--", "-")) 
      
    		pays = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche("pays"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-")) 
    		region = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche("region"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-")) 
    		dept =LCase( Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche("dept"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-"), "/", "-")) 
    		ville = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche("ville"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), " ", "-"), "’", "-"), "'", "-"), "/", "-")) 
    		nom = LCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( rsFiche("nom"), "ñ", "n"), "á", "a"), ",", "-"), "í", "i"), "ó", "o"), "ò", "o"), "ù", "u"), "ü", "u"), "ú", "u"), "õ", "o"), "ô", "o"), "â", "a"), "ë", "e"), "ã", "a"), "à", "a"), "î", "i"),"ï", "i"), "ê", "e"), "é", "e"), "è", "e"), "/", "-"), " ", "-"), "’", "-"), "'", "-"), """", ""), "&", ""), "--", "-"))
  • JiBéDoublevé
    Membre à l'essai
    Pour mon premier post, je vais vous donner cette perle:

    Code :
    My.Company.Some.FullName.Proxy.ADataContract refresh = SomeUsefulHelperObj.GetInstance().BackupFunctionNameRefresh != null && SomeUsefulHelperObj.GetInstance().BackupFunctionNameRefresh.WorkingDate != DateTime.MinValue ? SomeUsefulHelperObj.GetInstance().BackupMonitoringRefresh : SomeUsefulHelperObj.GetInstance().MonitoringRefresh;
    La taille originale du code avant que je le rende anonyme est de 377 caractères.
    Le tout en une ligne... Ca m'a pris 5 minutes pour me rendre compte que c'était un opérateur ternaire...Et tout le code est comme ça...
  • Barsy
    Expert confirmé
    Ce matin, dans le projet que je suis en train de reprendre, je suis tombé sur ce code :

    Code C# :
    1
    2
    3
    4
    5
    6
    7
      
    int Id; 
    if (int.TryParse(maValeur.ToString(), out Id)) 
    { 
    	if (Id.ToString().Contains("-")) 
    		Id = Convert.ToInt32(Id.ToString().Replace("-", String.Empty)); 
    }

    Le code ci-dessus permet de retourner la valeur absolue d'un entier, efficace non ?
  • jfrag
    Membre régulier
    en PHP :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    $civilite = array('M.', 'Mme', Mlle);
    
    switch($candidatInfo->civilite){
      case 0:
        $candidatInfo->civilite = $civilite[$candidatInfo->civilite];
        break;
      case 1:
        $candidatInfo->civilite = $civilite[$candidatInfo->civilite];
        break;
      case 2:
        $candidatInfo->civilite = $civilite[$candidatInfo->civilite];
        break;
    }
    magnifique le switch de la mort qui tue !!!!!!!!
  • Envoyé par threshold

    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"
  • Auteur
    Expert éminent sénior
    Quand j'ai repris un projet sous C++ builder j'ai découvert dans chaque fonction du projet des déclarations de la forme :
    Code c++ :
    1
    2
    3
      
    entier a, b, c; 
    chaine nom, prenom;


    Et après avoir longuement cherché (le projet possédait plus d'une centaine de fichiers) j'ai découvert dans un fichier C++ bien caché ceci :
    Code c++ :
    1
    2
    3
      
        typedef int entier; 
        typedef AnsiString chaine;
    Bref, chaque type C++Builder avait été francisé
  • gibet_b
    Membre actif
    Alors moi le pire morceau de code que j'ai vu a été écrit par une amie lorsque j'étais en BTS IG. C'était du VB.

    Code :
    1
    2
    3
    4
    5
    for i=0 to 10 then
        if (je ne sais plus quel condition) then
            i = i -1
        end if
    next i

    Et le compilateur VB laissait passer ça !!! En Delphi, il est pas d'accord... Cette amie me demandait de l'aide parce que son programme plantait, quand j'ai vu ça, je lui ai dit : "bah tu as trouvé le moyen pas forcément évident de faire une boucle for infinie, donc tu vires ça et après je t'aide à trouver ton erreur". Elle était un peu vexée
  • ThomasR
    Membre expert
    On voit souvent des codes du genre :

    Code :
    1
    2
    3
    4
    5
    6
    7
    if(empty($var)){
        return true;
    }
    else{
        return false;
    }
    Alors que ceci équivaut à :

    Code :
    1
    2
    return empty($var);
  • grunt2000
    Membre éclairé
    Vu en COBOL: La vraie programmation séquentielle.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    AFFICHAGE DE L'ECRAN ET SAISIE
    
    SI ERREURS DE SAISIE
       AFFICHAGE DE L'ECRAN ET SAISIE
       
       SI ERREURS DE SAISIE
          AFFICHAGE DE L'ECRAN ET SAISIE
         
           SI ERREURS DE SAISIE
              AFFICHAGE DE L'ECRAN ET SAISIE
    
               SI ERREURS DE SAISIE
                  On quitte le programme. 
                  Parce que bon, on a laissé à l'utilisateur quatre chances, non?