Developpez.com

Le Club des Développeurs et IT Pro

Que faire lorsque le programmeur qui vous a précédé ne sait pas ce qu'est une itération ?

Le cas de Don R

Le 2009-12-09 10:19:59, par Katleen Erna, Expert éminent sénior
Que faire lorsque le programmeur qui vous a précédé ne sait pas ce qu'est une itération ? Le cas de Don R

Don R est un programmeur normal, avec un travail normal, dans une compagnie normale. D'ailleurs, ce matin, c'est son premier jour dans la nouvelle boîte qui vient de le recruter. Confiant, il s'installe à son poste alors que son supérieur vient le voir, pour lui annoncer que le premier cas qu'il aura à traiter sera "facile".

"Ca sera fait en un rien de temps !", assure-t-il, jovial, à la nouvelle recrue. "C'est un soucis qui arrive régulièrement, et je l'ai déjà arrangé plusieurs fois. Des fois, il y a des descriptions avec trop d'espaces, et quand on envoie un datafeed à la compagnie concernée, ça risque de dérègler leurs systèmes. Mais je suis sûr que tu sauras t'en tirer, c'est un cas de routine pour nous.", termine son patron, lui tappant sur l'épaule.

L'homme avait raison, le cas était plutôt facile à résoudre...

Jetez un oeil au code en question :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// pull double spaces
itemDesc = 
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
      itemDesc, 
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " ");

Se demandant pourquoi 24 replacements avaient été utilisés, Don regarda la version précédente...

Code :
1
2
3
4
5
6
7
8
9
10
11
// pull double spaces
itemDesc = 
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
    stringReplace(stringReplace(
      itemDesc, 
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " "),
    "  ", " "),"  ", " ");


Puis, la version antérieure à la version précédente...

Code :
1
2
3
4
5
6
7
8
9
10
11
// pull double spaces
itemDesc = 
    stringReplace(
    stringReplace(
    stringReplace(
    stringReplace(
      itemDesc, 
    "  ", " "),
    "  ", " "),
    "  ", " "),
    "  ", " ");

Une sorte de "suite logique" semblait se faire voir, aussi, il remonta encore d'une version....

Code :
1
2
3
4
5
// pull double spaces
itemDesc = stringReplace(stringReplace(
    stringReplace(itemDesc, "  ", " "),
    "  ", " "),
    "  ", " ");

Puis une autre...

Code :
1
2
3
4
// pull double spaces
itemDesc = stringReplace(
    stringReplace(itemDesc, "  ", " "),
    "  ", " ");

Finalement, il atteint la version de départ...

Code :
1
2
// pull double spaces
itemDesc = stringReplace(itemDesc, "  ", " ");
Bien qu'il fut tenté de rajouter un ligne similaire à celles ajoutées par son patron, Don décida de tout remplacer par ceci :

Code :
1
2
// pull double spaces
regexReplace(itemDesc, "[ ][ ]+", " ");
L'histoire ne dit pas s'il fut félicité ou remercié pour ce geste.

Avez-vous déjà vécu des situations similaires ?
  Discussion forum
26 commentaires
  • michel.bosseaux
    Membre confirmé
    Ca fait peur... mais j'ai connu des cas aussi hallucinants moi même donc je sais que ça existe. Malheureusement.
  • Rykian
    Futur Membre du Club
    Tiens, un article qui aurait pu terminer sur DailyWTF
  • Il y était déjà :

    http://thedailywtf.com/Articles/A-Sp...y-Problem.aspx

    SVP indiquez vos sources, les 3/4 (a vu de nez, je dirai plus) des articles news ne sont que des traductions , sans indiquer la source. OK vous n'êtes pas journaliste et vous voulez partager l'info (et c'est très bien), mais donnez vos sources.
  • FloMo
    Membre expérimenté
    J'ai connu ça dans une très grosse société... (paramètres de fonctions remplacés par n versions de la fonction aussi) Le code avait de l'âge, ça peut excuser.
  • martopioche
    Membre éclairé
    -_- je suis en plein dedans sur en effet une trèès vielle appli -_-
  • J'ai aussi rencontrer ce cas un jour

    Au lieu d'utiliser switch() il utilisait une suite de if else , if else i...... imbriquée !
  • FloMo
    Membre expérimenté
    Envoyé par jahbromo
    J'ai aussi rencontrer ce cas un jour

    Au lieu d'utiliser switch() il utilisait une suite de if else , if else i...... imbriquée !
    A la limite, le 'if else' imbriqué ne fait pas plus de code et est plus performant, donc ça peut se justifier...
  • Jonas0122
    Nouveau membre du Club
    Envoyé par jahbromo
    J'ai aussi rencontrer ce cas un jour

    Au lieu d'utiliser switch() il utilisait une suite de if else , if else i...... imbriquée !
    Ca je trouve que plutôt facile et pas trop choquant, switch() ce n'est pas ce qui est tjrs le plus utile (même si ca l'ai beaucoup on est d'accord),

    moi j'ai connu des lignes de codes imbriquées de cette façon:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
      protected function request($method, $url
    							   
    							   
    							   
    							   
    							   
    							   
    							   , $vars = array()) {
            $this->handle = curl_init();
            
            switch ($method) 
    																																																					{
                case 'GET':
                    curl_setopt($this->handle, CURLOPT_HTTPGET, true);
                    break;
     case 'POST':
        curl_setopt($this->handle, CURLOPT_POST, true);
                   																													 break	;
    									            default:
              curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $method);
           }
    Et ca venait pas d'un problème d'éditeur, c'est pas pareil que raconté dans l'article mais bon je tenais à le dire

    tres bon article en tout cas!
  • pmithrandir
    Expert éminent
    Envoyé par Katleen Erna

    Code :
    1
    2
    // pull double spaces
    itemDesc = stringReplace(itemDesc, "  ", " ");
    Juste pour savoir, c'est sencé faire quoi ce code... parce que bon, je suis aps familier de cette fonction et je ne comprend ni le code de la fin, ni le string replace... Bon , je suis peut etre pas bien reveillé, mais bon...

    ca remplace dans itemDesc un espace par un espace ?
  • Fallen_Leaf
    Nouveau membre du Club
    Envoyé par pmithrandir
    Juste pour savoir, c'est sencé faire quoi ce code... parce que bon, je suis aps familier de cette fonction et je ne comprend ni le code de la fin, ni le string replace... Bon , je suis peut etre pas bien reveillé, mais bon...

    ca remplace dans itemDesc un espace par un espace ?
    Un double espace par un seul espace