Metadata

Apa itu anotasi metadata?

Dimulai dengan simbol @, berfungsi menambahkan informasi statis tambahan pada kode. Dibaca oleh kompiler, IDE dan penganalisis statis, tidak mengubah logika saat program berjalan.

Dua format penulisan yang valid:

  1. Konstanta bawaan waktu kompilasi: @override, @deprecated
  2. Pemanggilan konstruktor konstanta: @Deprecated("Teks peringatan"), anotasi buatan sendiri seperti @Todo("xxx", "xxx")

Biasanya diterapkan pada kelas, metode, variabel, fungsi, parameter, import, enum dan elemen kode lainnya.

@Deprecated

Menandai API yang sudah usang. Wajib tuliskan pengganti dan tanggal penghapusan. Terdapat juga metode statis untuk batasan skenario khusus.

class Television {
  /// Pengganti: gunakan turnOn
  @Deprecated('Gunakan turnOn() sebagai gantinya, metode ini akan dihapus akhir tahun 2026')
  void activate() {
    turnOn();
  }

  void turnOn() {
    print("TV dinyalakan");
  }
}

// Contoh batasan khusus untuk API usang
@Deprecated.instantiate() // Larang instansiasi kelas ini dengan new
class OldDevice {}

@Deprecated.extend() // Larang kelas lain mewarisi kelas ini
class Base {}

// Mencoba mewarisi Base akan memunculkan peringatan di editor
class Sub extends Base {}

void main() {
  Television tv = Television();
  // Memanggil metode @Deprecated akan tampil garis coret + peringatan IDE
  tv.activate();
  // Metode baru yang disarankan
  tv.turnOn();

  // Membuat instansi OldDevice memicu peringatan @Deprecated.instantiate()
  OldDevice device = OldDevice();
}
Code language: Dart (dart)

Kode di atas tetap bisa dikompilasi dan dijalankan normal, hanya akan muncul peringatan di IDE dan kompiler. Anda bisa mencobanya menggunakan Android Studio atau IntelliJ IDEA.

@deprecated

Tanpa pesan kustom, hanya penanda usang sederhana. Sebaiknya gunakan @Deprecated("Penjelasan")

@deprecated
void oldFunc() {}
Code language: Dart (dart)

@override

Menandai anggota yang menimpa nama sama dari induk kelas / antarmuka. IDE akan validasi: jika salah tulis nama metode akan muncul error merah.

class Animal {
  void speak() {}
}

class Dog extends Animal {
  // @override menandai penimpaan metode speak milik induk
  @override
  void speak() {
    print("Guk guk");
  }
}

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

class Pig extends Animal {
   // Tidak ada penimpaan
}

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

  dog.speak(); // Keluaran: Guk guk
  cat.speak(); // Keluaran: Meong
  pig.speak();
}
Code language: Dart (dart)

@pragma

Mengirim perintah optimasi tingkat rendah atau identifikasi ke kompiler dan penganalisis statis, umum dipakai untuk pengembangan tingkat dasar.

// Contoh: Beri tahu kompiler untuk inline fungsi ini
@pragma('vm:prefer-inline')
int add(int a, int b) => a + b;
Code language: Dart (dart)

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *