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

Le , 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 : 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


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Paul TOTH Paul TOTH - Expert éminent sénior http://www.developpez.com
le 16/12/2011 à 18:59
Citation Envoyé par Bebel  Voir le message
C'est possible. Regarde par exemple le 31140, il correspond a 3/4 villes.

et souvent 97400 n'existe pas j'étais le mois dernier à Paris pour envoyer un colis...le soft me demande mon adresse, mon code postal était refusé, j'ai du pu passer par le guichet
Avatar de le y@m's le y@m's - Expert confirmé http://www.developpez.com
le 13/12/2012 à 14:10
Code java : Sélectionner tout
1
2
protected static String pckStr = (new Exception()).getStackTrace()[0].getClassName(); 
protected static Logger s_logger = Logger.getLogger(pckStr);
Pourquoi faire simple quand on peut faire compliqué...
Avatar de Deadpool Deadpool - Membre chevronné http://www.developpez.com
le 13/12/2012 à 14:14
Citation Envoyé par le y@m's  Voir le message
Code java : Sélectionner tout
1
2
protected static String pckStr = (new Exception()).getStackTrace()[0].getClassName(); 
protected static Logger s_logger = Logger.getLogger(pckStr);
Pourquoi faire simple quand on peut faire compliqué...

Ah oui, là il a été le chercher loin son nom de classe.
Avatar de Médinoc Médinoc - Expert éminent sénior http://www.developpez.com
le 14/12/2012 à 6:52
Minute, que contient la stacktrace pendant une init de variables statiques, en fait?
Avatar de le y@m's le y@m's - Expert confirmé http://www.developpez.com
le 14/12/2012 à 10:55
Citation Envoyé par Médinoc  Voir le message
Minute, que contient la stacktrace pendant une init de variables statiques, en fait?

La première ligne de la stacktrace correspond à là où est instancier l'exception. Donc cela revient à recupérer la classe dans laquelle est écrit ce bout de code (que le contexte soit statique ou pas) .
En fait c'est une manière compliquée et méga crado (création d'une exception avec toute la stacktrace derrière ) de faire MaClass.class.getName().
La création "usuelle" d'un logger étant donc :
Code java : Sélectionner tout
private static Logger LOG = Logger.getLogger(MaClass.class.getName());
Avatar de Jidefix Jidefix - Membre éprouvé http://www.developpez.com
le 14/12/2012 à 12:20
Oui mais le truc de l'exception tu peux le copier/coller dans toutes les classes, tandis que
Code : Sélectionner tout
MaClass.class.getName()
Tu es obligé de le modifier à chaque fois, et donc de risquer un violent claquage de doigt.

Tout ça pour finir de toute façon dans l'appender par défaut dans la majorité des applis...

(les templates de classe? c'est quoi ça?)
Avatar de kolodz kolodz - Modérateur http://www.developpez.com
le 14/12/2012 à 13:09
Pas forcement si stupide...
Si tu renomme la classe avec un IDE, il te fera le changement aussi là...
Avatar de YannPeniguel YannPeniguel - Membre éprouvé http://www.developpez.com
le 04/06/2014 à 10:13
Excusez moi, je détère, mais j'ai immédiatement pensé à ce vieux topic quand j'ai vu ceci :
Code : Sélectionner tout
if (diffDateTaux !=0 && diffDateTaux<1)
Avatar de BenoitM BenoitM - Membre expert http://www.developpez.com
le 05/06/2014 à 10:43
Citation Envoyé par YannPeniguel  Voir le message
Excusez moi, je détère, mais j'ai immédiatement pensé à ce vieux topic quand j'ai vu ceci :
Code : Sélectionner tout
if (diffDateTaux !=0 && diffDateTaux<1)

Pourtant ca peut avoir une certaine logique
Eviter une division par 0
Avatar de Simara1170 Simara1170 - Membre éprouvé http://www.developpez.com
le 05/06/2014 à 10:50
Tout beau tout frais sous delphi:
Code : Sélectionner tout
1
2
3
4
5
6
If (true) then 
try 
//code de traitement 
except 
//comm du dev : Si je met pas d'except, ça plante, mais j'ai rien à faire dedans: si ça plante, on aura un message d'erreur de toute façon 
end;
Et merci d'être passé hein -_-'
Avatar de Barsy Barsy - Expert confirmé http://www.developpez.com
le 06/06/2014 à 16:56
Citation Envoyé par BenoitM  Voir le message
Pourtant ca peut avoir une certaine logique
Eviter une division par 0

Oui, si l'objet n'est pas un entier, ça peut en effet. D'où l'intérêt de mettre un commentaire pour éviter que celui qui reprend le code ne soit surpris.
Offres d'emploi IT
Realiser une course de voiture
CSINFO - Basse Normandie - Caen (14000)
Maître d'oeuvre starworld h/f
Societe Generale - Ile de France - Courbevoie
Ingénieur en développement web java/big data
Criteo - Ile de France - Paris (75000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil