Qu’est-ce qu’une annotation de métadonnées ?
Elles commencent par @ et ajoutent une information statique complémentaire au code. Elles sont lues par le compilateur, l’EDI et l’analyseur statique, sans modifier la logique d’exécution.
Deux syntaxes valides :
- Constantes natives de compilation :
@override,@deprecated - Appels de constructeurs constants :
@Deprecated("Message d’avertissement"), annotations personnalisées comme@Todo("xxx", "xxx")
Elles s’appliquent généralement aux classes, méthodes, variables, fonctions, paramètres, imports, énumérations, etc.
@Deprecated
Marque une API obsolète. Il est obligatoire d’indiquer l’alternative et la date de suppression. Elle propose également des méthodes statiques pour restreindre des cas d’usage spécifiques.
class Television {
/// Alternative : utiliser turnOn
@Deprecated('Utilisez plutôt turnOn(). Cette méthode sera supprimée fin 2026')
void activate() {
turnOn();
}
void turnOn() {
print("Téléviseur allumé");
}
}
// Exemples de restrictions d’obsolescence ciblées
@Deprecated.instantiate() // Interdit d’instancier cette classe avec new
class OldDevice {}
@Deprecated.extend() // Interdit aux autres classes d’hériter de celle-ci
class Base {}
// Tenter d’étendre Base déclenche un avertissement d’obsolescence dans l’éditeur
class Sub extends Base {}
void main() {
Television tv = Television();
// Appeler une méthode marquée @Deprecated affiche un barré et des avertissements dans l’EDI
tv.activate();
// Nouvelle méthode recommandée
tv.turnOn();
// Instancier OldDevice déclenche l’avertissement de @Deprecated.instantiate()
OldDevice device = OldDevice();
}Langage du code : JavaScript (javascript)
Le code ci-dessus se compile et s’exécute normalement ; seuls des avertissements apparaissent dans l’EDI et le compilateur. Vous pouvez tester cela avec Android Studio ou IntelliJ IDEA.
@deprecated
Sans message personnalisé, simple marqueur d’obsolescence. Préférez @Deprecated("Description")
@deprecated
void oldFunc() {}Langage du code : CSS (css)
@override
Marque les membres qui redéfinissent un élément homonyme de la superclasse ou d’une interface. L’EDI effectue une vérification : une faute de frappe sur le nom de la méthode affichera une erreur rouge.
class Animal {
void speak() {}
}
class Dog extends Animal {
// @override : indique la redéfinition de la méthode speak de la classe parente
@override
void speak() {
print("Ouaf ouaf");
}
}
class Cat extends Animal {
@override
void speak() {
print("Miaou");
}
}
class Pig extends Animal {
// Pas de redéfinition
}
void main() {
Animal dog = Dog();
Animal cat = Cat();
Animal pig = Pig();
dog.speak(); // Sortie : Ouaf ouaf
cat.speak(); // Sortie : Miaou
pig.speak();
}Langage du code : JavaScript (javascript)
@pragma
Transmet des directives bas niveau d’optimisation ou d’identification au compilateur et à l’analyseur statique, principalement utilisé pour le développement bas niveau.
// Exemple : demander au compilateur d’inline cette fonction
@pragma('vm:prefer-inline')
int add(int a, int b) => a + b;Langage du code : PHP (php)