metadatos

¿Qué son las anotaciones de metadatos?

Empiezan con @ y adjuntan información estática adicional al código. Son leídas por el compilador, el IDE y el analizador estático, sin afectar la lógica de ejecución.

Dos formatos válidos:

  1. Constantes integradas de tiempo de compilación: @override, @deprecated
  2. Llamadas a constructores constantes: @Deprecated("Texto de aviso"), anotaciones personalizadas como @Todo("xxx", "xxx")

Se usan habitualmente en clases, métodos, variables, funciones, parámetros, importaciones, enumeraciones, etc.

@Deprecated

Marca una API obsoleta. Es obligatorio indicar la alternativa y la fecha de eliminación. También cuenta con métodos estáticos para limitar escenarios específicos.

class Television {
  /// Alternativa: usa turnOn
  @Deprecated('Utiliza turnOn() en su lugar. Este método se eliminará a finales de 2026')
  void activate() {
    turnOn();
  }

  void turnOn() {
    print("Televisor encendido");
  }
}

// Ejemplos de restricciones de obsolescencia específicas
@Deprecated.instantiate() // Prohíbe instanciar esta clase con new
class OldDevice {}

@Deprecated.extend() // Prohíbe que otras clases hereden de esta
class Base {}

// Intentar heredar de Base genera una advertencia de obsolescencia en el editor
class Sub extends Base {}

void main() {
  Television tv = Television();
  // Al llamar al método marcado con @Deprecated, el IDE muestra tachado y advertencias
  tv.activate();
  // Método nuevo recomendado
  tv.turnOn();

  // Instanciar OldDevice activa la advertencia de @Deprecated.instantiate()
  OldDevice device = OldDevice();
}
Lenguaje del código: Dart (dart)

El código anterior se compila y ejecuta sin problemas, solo aparecen advertencias en el IDE y el compilador. Puedes probarlo con Android Studio o IntelliJ IDEA.

@deprecated

Sin mensaje personalizado, solo marca simple obsolescencia. Se recomienda preferir @Deprecated("Descripción")

@deprecated
void oldFunc() {}
Lenguaje del código: Dart (dart)

@override

Marca miembros que sobrescriben elementos con el mismo nombre de la superclase o interfaz. El IDE realiza comprobaciones: si escribes mal el nombre del método aparecerá un error rojo.

class Animal {
  void speak() {}
}

class Dog extends Animal {
  // @override indica sobrescritura del método speak de la clase padre
  @override
  void speak() {
    print("Guau");
  }
}

class Cat extends Animal {
  @override
  void speak() {
    print("Miau");
  }
}

class Pig extends Animal {
   // Sin sobrescritura
}

void main() {
  Animal dog = Dog();
  Animal cat = Cat();
  Animal pig = Pig();

  dog.speak(); // Salida: Guau
  cat.speak(); // Salida: Miau
  pig.speak();
}
Lenguaje del código: Dart (dart)

@pragma

Envía instrucciones de optimización de bajo nivel o reconocimiento al compilador y analizador estático, usadas principalmente en desarrollo de bajo nivel.

// Ejemplo: Indicar al compilador que inlinee esta función
@pragma('vm:prefer-inline')
int add(int a, int b) => a + b;
Lenguaje del código: Dart (dart)
Previous:
Next:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *