métadonnées

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 :

  1. Constantes natives de compilation : @override, @deprecated
  2. 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)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *