Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Programmation : Le pire bout de code que vous ayez vu
Qui l'a fait ? Pourquoi ? Pourquoi était-il si horrible ?

Le , par Gordon Fowler

0PARTAGES

1  0 
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
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
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
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
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

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de kolodz
Modérateur https://www.developpez.com
Le 15/12/2011 à 19:47
Voici comment on vérifie les codes postaux sur le site que je maintiens :
Code SQL : Sélectionner tout
select * from code_posteau
Le résultat de la requête est utilisé pour pour faire ceci :
Code php : Sélectionner tout
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.
5  0 
Avatar de Lyche
Expert confirmé https://www.developpez.com
Le 29/06/2010 à 10:34
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 : Sélectionner tout
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"), "/", "-"), " ", "-"), "’", "-"), "'", "-"), """", ""), "&", ""), "--", "-"))
4  0 
Avatar de JiBéDoublevé
Futur Membre du Club https://www.developpez.com
Le 02/08/2010 à 15:25
Pour mon premier post, je vais vous donner cette perle:

Code : Sélectionner tout
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...
4  0 
Avatar de Barsy
Expert confirmé https://www.developpez.com
Le 30/05/2011 à 13:29
Ce matin, dans le projet que je suis en train de reprendre, je suis tombé sur ce code :

Code C# : Sélectionner tout
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 ?
4  0 
Avatar de jfrag
Membre régulier https://www.developpez.com
Le 03/09/2010 à 10:53
en PHP :

Code : Sélectionner tout
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 !!!!!!!!
3  0 
Avatar de
https://www.developpez.com
Le 03/11/2009 à 18:32
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"
2  0 
Avatar de Auteur
Expert éminent sénior https://www.developpez.com
Le 03/11/2009 à 19:52
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++ : Sélectionner tout
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++ : Sélectionner tout
1
2
3
  
    typedef int entier; 
    typedef AnsiString chaine;
Bref, chaque type C++Builder avait été francisé
2  0 
Avatar de gibet_b
Membre actif https://www.developpez.com
Le 03/11/2009 à 20:02
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 : Sélectionner tout
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
2  0 
Avatar de ThomasR
Membre expert https://www.developpez.com
Le 04/11/2009 à 10:11
On voit souvent des codes du genre :

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

Code : Sélectionner tout
1
2
return empty($var);
2  0 
Avatar de grunt2000
Membre confirmé https://www.developpez.com
Le 04/11/2009 à 15:30
Vu en COBOL: La vraie programmation séquentielle.

Code : Sélectionner tout
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?
2  0