Précédent   Forum des professionnels en informatique > Le club des professionnels en informatique > Actualités
Actualités L'actualité des sociétés du secteur informatique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 03/11/2009, 17h21   #1 (permalink)
Chroniqueur Actualités
 
Date d'inscription: juillet 2009
Messages: 733
Par défaut 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 à 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.

Quelquefois ce "pire code" n'est pas trop méchant. Il relève juste du non sens :

Code java :
 
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 :
 
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 :
 
public void close(InputStream stream){
    stream = null;
}
 

InputStream est un flux vers une ressource. Pour le fermer, par exemple, il faut invoyer 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 :
 
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 cette 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
Gordon Fowler est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 17h32   #2 (permalink)
Membre à l'essai
 
Date d'inscription: septembre 2006
Messages: 42
Par défaut

J'en ai vu un pas mal en php, fait par le responsable développement de ma boîte :

Code :
if (true) {
} else {
...
}
Ce jour-là je me suis dis que finalement je n'étais pas le plus mauvais ...
crazyday est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 17h37   #3 (permalink)
Membre expérimenté
 
Avatar de Gastiflex
 
Date d'inscription: octobre 2004
Messages: 516
Par défaut

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.
Gastiflex est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 17h50   #4 (permalink)
Membre Expert
 
Avatar de BainE
 
Date d'inscription: mai 2004
Messages: 1 259
Par défaut

Deux petits bouts de codes qui nous ont fait bien marré devant la machine a café, en C++

Code C++ :
 
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 :
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
__________________
Code :
 .
      .
 .
"vaste programme"
BainE est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 17h54   #5 (permalink)
Membre Confirmé
 
Date d'inscription: février 2005
Localisation: sud-ouest
Âge: 35
Messages: 294
Par défaut

Dans le SDK de physX :

Code :
if(1)
{
...
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.
Acropole est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h00   #6 (permalink)
Invité régulier
 
Date d'inscription: mai 2006
Localisation: Bourg-en-Bresse
Âge: 23
Messages: 19
Par défaut

Un code javascript bien crade sur un template d'une page produit d'une boutique sous magento (php).

Code javascript :
 
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à ^^.
clemphenix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h07   #7 (permalink)
Nouveau membre du Club
 
Avatar de DrHelmut
 
Date d'inscription: octobre 2005
Localisation: Paris - Clichy
Âge: 29
Messages: 59
Par défaut

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 :
 
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;
}
 

Dernière modification par DrHelmut ; 04/11/2009 à 03h32.
DrHelmut est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h18   #8 (permalink)
Membre du Club
 
Avatar de Shaidak
 
Date d'inscription: août 2008
Localisation: IDF
Messages: 104
Par défaut

En Java avec Struts, un getter void ... tellement idiot qu'on a perdu 15min pour savoir d'où venait le problème
Shaidak est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h22   #9 (permalink)
Membre éclairé
 
Date d'inscription: juin 2006
Localisation: Toulouse
Messages: 368
Par défaut

Si vous voulez vous marrez avec ce genre de chose :

http://thedailywtf.com/Series/CodeSOD.aspx

C'est parfois a mourrir.

Code C# :
/// <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 ^^
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h24   #10 (permalink)
Nouveau membre du Club
 
Date d'inscription: juillet 2007
Messages: 73
Par défaut

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

Citation:
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 :
if(condition); 
//blabla qu'on écrit qu'une fois, et par conséquent qu'on débugge qu'une fois.

Dernière modification par threshold ; 20/01/2010 à 17h55.
threshold est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h29   #11 (permalink)
Invité de passage
 
Nom : dido dido
Date d'inscription: octobre 2009
Messages: 5
Par défaut 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 :
 
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)
dista est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h32   #12 (permalink)
Membre éclairé
 
Date d'inscription: juin 2006
Localisation: Toulouse
Messages: 368
Par défaut

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"
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h32   #13 (permalink)
Membre Confirmé
 
Date d'inscription: décembre 2006
Localisation: Toulouse
Messages: 263
Par défaut

En php :

Code :
foreach($_POST as $cle => $val)
     eval("\$".$cle."=\"".$val."\";");
J'ai sauté au plafond et je fais pas partie de l'équipe de dev web ...
tamiel est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h33   #14 (permalink)
Nouveau membre du Club
 
Date d'inscription: février 2008
Messages: 50
Par défaut

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 :
<?php 

$nom = post('nom');
$prenom = post('prenom');
[...]
Et dans un fichier inclus, ladite fonction :

Code :
<?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.
monsieurben est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 18h35   #15 (permalink)
Membre à l'essai
 
Date d'inscription: novembre 2008
Messages: 48
Par défaut

Comment faire une pause d'une seconde en java ?
Code :
 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
novembre est déconnecté   Envoyer un message privé Réponse avec citation
NEWS ACCUEILARTICLESAGENDADEBATSHUMOURWIKILIVRESF.A.QSOURCESDICOTELECHARGEZ

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Le club des professionnels en informatique > Actualités



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 14h03.


Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.