# Convention de nommage

Une convention de nommage dans la programmation informatique est un ensemble de règles de codage destinées à choisir les identifiants logiciels (noms des éléments du programme) dans le code source et la documentation.

## Principes

Les raisons pour lesquelles on utilise une convention de nommage (par opposition à l'autorisation accordée aux programmeurs de choisir n'importe quelle séquence de caractères) sont les suivantes :
* rendre le code source plus facile à lire et à comprendre avec moins d'efforts ;
* améliorer l'apparence du code source (par exemple, en interdisant les noms trop longs ou les abréviations) ;
Le choix de conventions de nommage peut prêter à controverse, les partisans de chaque convention tenant la leur pour la meilleure.
De telles conventions sont souvent imposées à l'échelle d'un projet ou d'un organisme, notamment dans le cadre du développement d'un logiciel de taille conséquente. Elles peuvent recouvrir un domaine plus large, et porter par exemple sur la documentation, les commentaires, des fonctionnalités du langage qui peuvent être imposées ou prohibées (ça peut être le cas de l'instruction goto), etc. On parle alors plutôt de convention, ou norme, de codage. Par exemple, l'industrie emploie la norme MISRA C, qui est même intégrée dans des analyseurs de code ainsi que certains compilateurs. À une échelle encore plus large, des conventions peuvent porter sur tout le cycle de vie du logiciel.

### Avantages

L'utilisation d'une convention de nommage peut procurer une sécurité beaucoup plus grande dans l'utilisation des programmes informatiques, du fait que le code source doit respecter des règles précises. Il sera ainsi plus facile d'atteindre des niveaux EAL plus élevés, par exemple dans le logiciel, lorsqu'il s'agit de vérifier le code source.
Les bénéfices détaillés peuvent se décliner de la façon suivante :
* fournir une information supplémentaire (i.e. métadonnées) sur l'utilisation d'un identifiant ;
* aider à formaliser les attentes et promouvoir la cohérence dans une équipe de développement ;
* permettre l'utilisation de maintenance automatisée ou de recherche, et remplacer les outils avec des risques minimum d'erreur ;
* améliorer la clarté dans les cas d'ambiguïtés ;
* améliorer l'apparence esthétique et professionnelle du produit (par exemple, en interdisant les noms trop longs, comiques, ou les abréviations) ;
* aider à éviter les doublons qui peuvent apparaître lorsque des logiciels de différentes organisations interagissent entre eux (voir aussi : espace de noms).

### Difficultés

Le choix des conventions de nommage (et leur domaine d'application) fait souvent l'objet de débats. De plus, même avec des conventions en place connues et bien définies, il peut arriver que des organisations ne parviennent pas à les mettre en œuvre d'une façon cohérente, ce qui peut causer de la confusion.
Ces défis peuvent être exacerbés si les règles en interne de la convention de nommage sont incohérentes, arbitraires, difficiles à mémoriser ou, au contraire, plus fastidieuses que bénéfiques.

## Éléments d'une convention de nommage
### Schéma de mots composite (OF Language)

L'un des systèmes de convention publié depuis le plus longtemps était "OF Language" d'IBM, documenté dans les années 1980 dans le manuel IMS (Information Management System). Il détaillait le schéma de mots PRIME-MODIFIER-CLASS qui consistait en noms comme "CUST-ACT-NO" pour indiquer "customer account number".
* PRIME : ces mots devaient indiquer les "entités" d'intérêt majeur dans un système.
* MODIFIER : ces mots étaient utilisés pour des raffinements, une qualification, et une lisibilité supplémentaires.
* CLASS : ces mots étaient dans l'idéal une liste très courte de types de données correspondant à une application particulière. Les mots CLASS communs pouvaient être :
** NO (number, nombre),
** ID (identifier, identifiant),
** TXT (text, texte),
** AMT (amount, montant),
** QTY (quantité),
** FL (flag),
** CD (code),
** etc.
En pratique, les mots CLASS disponibles formaient une liste de moins de deux douzaines de termes. Les mots CLASS, positionnés sur la droite (suffixe), avaient pratiquement le même objectif que les préfixes de la notation hongroise.
L'objectif des mots CLASS, en plus de la cohérence, était de spécifier au programmeur le type de données d'un champ particulier. Avant l'acceptation des champs Booléens (deux valeurs seulement), FL (flag) indiquait un champ avec seulement deux valeurs possibles.

## Exemples
### Norme ISO/CEI 11179 de registre de métadonnées

la norme ISO/CEI 11179-5 sur les registres de métadonnées contient des conventions de nommage pour les concepts des éléments (noms d'éléments), les domaines conceptuels, et les domaines de valeur.
Cette norme concerne tous les langages de balisage (HTML, XML,...), mais aussi, à travers les éléments de métadonnées, les données qui peuvent être utilisées par d'autres types de langages.

### Langage Java

En Java, dès l'origine de la création de ce langage, des conventions ont établi des exigences strictes sur les classes et les variables à capitaliser différemment. Ainsi, pour un programmeur Java, widget.expand et Widget.expand impliquent des comportements significativement différents, même sans connaissance préalable de la classe Widget et malgré le fait que le compilateur n'oblige à aucune règle.
En effet, par convention, widget est considéré comme une variable. L'usage courant, laisse penser que widget est une instance de la classe Widget. Par contre, Widget.expand est interprété par le programmeur Java comme "la méthode statique expand de la classe Widget".

### Langage C

Les identifiants qui représentent des macros en C et C++ sont, par convention, écrits en utilisant seulement des lettres en capitales.