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 :
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 :
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 :
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) :
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
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 :
-
kolodzModérateurVoici comment on vérifie les codes postaux sur le site que je maintiens :
Code SQL : select * from code_posteau
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.le 15/12/2011 à 19:47 -
LycheExpert éminentEt 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
12pays2 = 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"), "/", "-"), " ", "-"), "", "-"), "'", "-"), """", ""), "&", ""), "--", "-"))
le 29/06/2010 à 10:34 -
JiBéDoublevéMembre à l'essaiPour 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;
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...le 02/08/2010 à 15:25 -
BarsyExpert 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
7int 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 ?le 30/05/2011 à 13:29 -
jfragMembre régulieren 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; }
le 03/09/2010 à 10:53 -
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"le 03/11/2009 à 18:32 -
AuteurExpert éminent séniorQuand 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
3entier 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
3typedef int entier; typedef AnsiString chaine;
le 03/11/2009 à 19:52 -
gibet_bMembre actifAlors 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
5for 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éele 03/11/2009 à 20:02 -
ThomasRMembre expertOn voit souvent des codes du genre :
Code : 1
2
3
4
5
6
7if(empty($var)){ return true; } else{ return false; }
Code : 1
2return empty($var);
le 04/11/2009 à 10:11 -
grunt2000Membre éclairéVu en COBOL: La vraie programmation séquentielle.
Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14AFFICHAGE 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?
le 04/11/2009 à 15:30