Annotation (informatique)
En programmation, une annotation est un Ă©lĂ©ment permettant d'ajouter des mĂ©ta-donnĂ©es Ă un code source. Selon le langage de programmation et ce qu'a choisi le programmeur, elles peuvent ĂȘtre accessibles uniquement lors de la compilation, prĂ©sentes uniquement dans le fichier compilĂ©, voire accessibles Ă l'exĂ©cution. Cette technique est une alternative aux fichiers de configuration, souvent Ă©crits dans des formats tels que le XML ou le YAML.
Selon le langage, les annotations peuvent ĂȘtre ajoutĂ©es aux classes, mĂ©thodes, attributs, paramĂštres, variables locales et paquetages ou mĂȘme aux annotations elles-mĂȘmes.
Les annotations ou leurs Ă©quivalents existent pour Microsoft .NET (attributs .NET), Java (depuis la version 1.5), PHP (depuis la version 5[1]) et Python (decorators).
Des équivalents existent pour le langage C aux travers des attributs, qui sont des extensions non standard au langage C. Ils sont moins puissants que les annotations car spécifiques au compilateur utilisé et ils ne sont accessibles qu'à la compilation. Par exemple, GCC propose des attributs pour les fonctions[2], variables[3] et types[4].
Pour et contre les annotations
Avantages
- Les annotations permettent aux programmeurs de déclarer dans leur code source comment leurs programmes doivent se comporter. C'est un exemple de construction déclarative.
- Elles suivent le principe DRY, regroupant ainsi les méta-données avec le code auxquelles elles s'appliquent. Les méta-données restent normalement toujours synchronisées avec le code.
- Elles peuvent ĂȘtre gĂ©nĂ©rĂ©es automatiquement (ex : par Javadoc).
Inconvénients
- L'ajout de méta-données dans un fichier compilé ou dans la mémoire à l'exécution requiert des ressources mémoire additionnelles.
- Il y a peu de standards dictant comment ces mĂ©ta-donnĂ©es doivent ĂȘtre employĂ©es.
Références
- http://www.clochix.net/post/2009/05/04/Utiliser-des-annotations-en-PHP-avec-addendum
- (en) Declaring Attributes of Functions, documentation en ligne GCC
- (en) Specifying Attributes of Variables, documentation en ligne GCC
- (en) Specifying Attributes of Types, documentation en ligne GCC