Quels sont les pires noms de variables que vous avez déjà vus
? Un développeur identifie les deux plus mauvais noms couramment utilisés

Les rubriques (actu, forums, tutos) de Développez
Réseaux sociaux


 Discussion forum

Sur le même sujet
Le , par Hinault Romaric, Responsable Actualités
Un problème auquel est continuellement confronté le développeur dans son activité est l’attribution des noms aux variables.

Afin de faciliter la lisibilité et la compréhension du code, le programmeur opte le plus souvent pour des variables suffisamment descriptives ou se reporte à des conventions de nommage.

ANDY Lester, un développeur senior se penche dans un billet de blog sur les noms attribués aux variables et présente selon lui les deux pires noms qui sont constamment utilisés par les développeurs pour qualifier les variables.

La pire dénomination qu’un développeur peut donner à une variable est selon Lester le nom « data ».

Code php :
1
2
3
  
$data = read_record(); 
print "ID = ", $data["CUSTOMER_ID"];

« Bien sûr il y a des données ! C’est ce que contiennent les variables » écrit Lester, qui ironise par la suite. « C’est comme si vous emballez vos biens dans des cartons de déménagement et vous les étiquetez le carton des matières ».

Pour ANDY Lester, les noms des variables doivent dire quel type de données est manipulé.

En seconde position, l’utilisation des chiffres pour distinguer les variables. Exemple : data2.

Code php :
1
2
3
4
5
6
7
8
9
  
$total = $price * $qty; 
$total2 = $total - $discount; 
$total2 += $total2 * $taxrate; 
  
$total3 = $purchase_order_value + $available_credit; 
if ( $total2 < $total3 ) { 
    print "You can't afford this order."; 
}

N’importe quelle variable qui s’appuie sur un chiffre pour se distinguer d’une autre doit être immédiatement renommée. Le véritable assassin dans le code ci-dessus selon Lester est la ligne « if ($ total2 <$ total3) » qui obliger à remonter plus haut pour l’interpréter.

Ce ne sont là que deux exemples sur de mauvais noms de variables qui sont utilisés par les développeurs.

Source : Blog ANDY Lester

Et vous ?

Avez-vous déjà utilisé ces noms pour vos variables ?

Quels autres pires noms de variables avez-vous déjà vus ?


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


 Poster une réponse

Avatar de Melancoliah Melancoliah
http://www.developpez.com
Nouveau Membre du Club
le 29/05/2012 16:18
Le pire est lorsque tu te retrouves avec une tonne de variable (je parles du VB.NET) qui sont pas changées (TextBox34) et ça peut allé très loin ...

Je ne dirais pas que c'est moi Je trouve ça horrible mais je continu ...
Avatar de bilbonec bilbonec
http://www.developpez.com
Membre éclairé
le 27/06/2012 14:39
Pour ma part, le pire que j'ai vu est un nom de variable utilisé un peu partout dans les tests unitaires de mon projet : $res !

Comme son nom l'indique : une variable utilisée pour stocker les résultats d'une méthode testée.

Aucune idée sur le type de résultat retourné, sur le cas testé ou autre. J'ai eu beau me battre pour que ce genre de variable disparaisse et pourtant il est toujours autant utilisé
Avatar de air-dex air-dex
http://www.developpez.com
Membre Expert
le 27/06/2012 16:33
Citation Envoyé par bilbonec  Voir le message
Pour ma part, le pire que j'ai vu est un nom de variable utilisé un peu partout dans les tests unitaires de mon projet : $res !

Comme son nom l'indique : une variable utilisée pour stocker les résultats d'une méthode testée.

Aucune idée sur le type de résultat retourné, sur le cas testé ou autre. J'ai eu beau me battre pour que ce genre de variable disparaisse et pourtant il est toujours autant utilisé

Si le code (ou le test) en question est bien documenté et/ou bien commenté, on comprend aisément ce que "res" contient. Le nom de la variable n'est donc pas à remettre en cause.
Avatar de Dutiona Dutiona
http://www.developpez.com
Membre régulier
le 27/06/2012 17:29
Le pire que j'ai fait, à un prof que j'aimais pas !
Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
class _{ 
    private int __; 
  
    public _(int ___){ 
        __ = ___; 
    } 
  
    public int guessWhatImDoing(){ 
        if(__<=0)return 1; 
        _ ____=new _(___()-1); 
        return ___()*____.guessWhatImDoing(); 
    } 
  
    public int ___(){ 
        return __; 
    } 
}
He ben après ça il m'aimait pas non plus ! ahahaha

PS : c'est une factorielle volontairement compliquée !
Avatar de Sergejack Sergejack
http://www.developpez.com
Membre émérite
le 28/06/2012 9:12
Mieux vaut parfois imposer au (re)lecteur de remonter dans le code que de perdre du temps à rédiger des variables dont les noms chambouleraient la remise du prix Goncourt.
Avatar de SurferIX SurferIX
http://www.developpez.com
Membre émérite
le 02/07/2012 9:45
Citation Envoyé par bilbonec  Voir le message
Pour ma part, le pire que j'ai vu est un nom de variable utilisé un peu partout dans les tests unitaires de mon projet : $res !

Comme son nom l'indique : une variable utilisée pour stocker les résultats d'une méthode testée.

Aucune idée sur le type de résultat retourné, sur le cas testé ou autre. J'ai eu beau me battre pour que ce genre de variable disparaisse et pourtant il est toujours autant utilisé

Euh moi j'ai presque toujours une variable nommée "$result" qui est le retour. Mes fonctions ne dépassent jamais 100 lignes de code, donc peut être que je n'ai pas besoin de savoir ce qu'il y a dedans. Et puis c'est en Php, donc très faiblement typé, on peut mettre n'importe quel type dans une variable. Donc ce que tu dis ne convient pas forcément.
Avatar de souviron34 souviron34
http://www.developpez.com
Expert Confirmé Sénior
le 02/07/2012 10:56
Citation Envoyé par SurferIX  Voir le message
. Et puis c'est en Php, donc très faiblement typé, on peut mettre n'importe quel type dans une variable. Donc ce que tu dis ne convient pas forcément.

ça n'a pas grand chose à voir...

Si le nom de la fonction est clair, il est alors totalement compréhensible dans tous les cas d'appeler "res" le retour, si on ne s'en sert que là..

C'est sûr que si on a "res1", "res2, .. res100", là c'est une faute grave.. et impossible à lire...
Avatar de deuz59 deuz59
http://www.developpez.com
Membre régulier
le 02/07/2012 17:46
Citation Envoyé par souviron34  Voir le message
ça n'a pas grand chose à voir...

Si le nom de la fonction est clair, il est alors totalement compréhensible dans tous les cas d'appeler "res" le retour, si on ne s'en sert que là..

C'est sûr que si on a "res1", "res2, .. res100", là c'est une faute grave.. et impossible à lire...

Avec une fonction unitaire de moins de 30 lignes ça peut passer en effet, mais de façon globale, on est toujours gagnant a bien nommer une variable...
Avatar de SurferIX SurferIX
http://www.developpez.com
Membre émérite
le 09/07/2012 11:31
Citation Envoyé par souviron34  Voir le message
ça n'a pas grand chose à voir...

Si, parce que dans la conversation, des personnes parlaient du fait qu'en fonction du type intrinsèque de la variable, le nom pouvait être explicite (intXXX = entier, strXXX = chaine etc), alors qu'en Php comme c'est faiblement typé, ce principe ne s'applique plus, donc tu ne peux pas faire (intRetour = entier, strRetour = chaine etc), ce qui pourrait être un indice supplémentaire pour aider à comprendre.

Citation Envoyé par deuz59  Voir le message
Avec une fonction unitaire de moins de 30 lignes ça peut passer en effet, mais de façon globale, on est toujours gagnant a bien nommer une variable...

Si, dans toutes tes fonctions qui renvoient quelque chose, pour chaque fonction, tu as :

- une variable nommée "$result" ;
- tes fonctions sont courtes.

Alors, tu sais que c'est là que sera forcément le résultat de retour. Le nom de la fonction doit suffire à lui tout seul.

Exemples concrets (pris de deux fichiers différents) :

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
28
29
30
31
32
33
    public function translateDate( 
        $date_time, 
        $format = 'date_time_format_long_sans_annee', 
        $first_upcase=true 
    ) {  
        switch ($this->_trad->getLang()) { 
            /* (!!) RAF pour l'anglais */ 
            case 'cn': 
                /* Code pour le jour où je le ferai en Chinois */ 
                break; 
 
            default: 
                /* Traduction date en français */ 
                $jour = $this->_trad->get( 
                    self::$_TabStrDaysOfWeek[ $date_time->format('w') ] 
                );   
                $mois = $this->_trad->get( 
                    self::$_TabStrMonths[ $date_time->format('n') ] 
                );   
                $retour = sprintf( 
                    $date_time->format( 
                        $this->_trad->get($format) 
                    ),   
                    $jour, 
                    $mois 
                );   
                if ($first_upcase) { 
                    $retour = ucfirst($retour); 
                }    
                break; 
        }    
        return $retour; 
    }
et

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public function queryManyValues( 
        $sql, 
        $tab, 
        $type_fetch=PDO::FETCH_BOTH, 
        $debug=false, 
        $debug_console=false, 
        $debug_maxlen=false 
    ) {  
        if ($debug) { 
            $this->_queryDump($sql, $tab, $debug_console, $debug_maxlen); 
        }    
        $stmt = $this->execQuery($sql, $tab); 
        $retour = $stmt->fetch($type_fetch); 
        return $retour; 
    }
Désolé mais si le type ne comprend pas à quoi sert "$retour", là, je ne peux vraiment plus rien pour lui. Ah si la documentation. Toutes mes fonctions sont documentées. Exemple pour la fonction précédente :

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
 
    /** 
     * Exécution d'une requête et renvoi du résultat, afin de 
     * pouvoir lire plusieurs champs 
     * 
     * @param string $sql           Requête à exécuter 
     * @param array  $tab           Paramètres à passer à la requête 
     * @param string $type_fetch    Type de résultat de retour : 
     *                              PDO::FETCH_BOTH (défaut): 
     *                              retourne un tableau indexé 
     *                              par les noms de colonnes 
     *                              et aussi par les numéros de 
     *                              colonnes, commençant à 
     *                              l'index 0, comme retournés 
     *                              dans le jeu de résultats 
     * @param bool   $debug         Si on affiche une trace 
     *                              de debug 
     * @param bool   $debug_console Si le debug de retour est 
     *                              pour une console 
     * @param bool   $debug_maxlen  Si le debug de retour est 
     *                              pour une console, on peut 
     *                              préciser la longueur max 
     *                              par ligne 
     * 
     * @return integer Nombre d'enregistrements affectés par la requête 
     */

Et là vraiment, vraiment... si la personne ne comprend pas à quoi sert "$retour", là, je ne peux vraiment plus rien...
Avatar de deuz59 deuz59
http://www.developpez.com
Membre régulier
le 10/07/2012 15:06
Citation Envoyé par SurferIX  Voir le message

Si, dans toutes tes fonctions qui renvoient quelque chose, pour chaque fonction, tu as :

- une variable nommée "$result" ;
- tes fonctions sont courtes.

Alors, tu sais que c'est là que sera forcément le résultat de retour. Le nom de la fonction doit suffire à lui tout seul.

Cela peut en effet passer avec une troisième condition :
- le nom de tes fonctions est précis et compréhensible

Offres d'emploi IT
Développeur expérimenté java et pl/sql h/f
CDI
IBMSC - Nord Pas-de-Calais - LOMME (59160)
Parue le 08/08/2014
Analyste fonctionnel h/f
CDI
Atos Technology Services - Ile de France - Bezons (95870)
Parue le 18/08/2014
gestionnaire paie cabinet (H/F)
CDI
Grey Consulting - Ile de France - Malakoff (92240)
Parue le 29/07/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula