CodeBlanks Logo Icon CodeBlanks

Macro

Dart 3 macro deneyi öğrenirsin.

Macro (Dart 3)

Dart 3, deneysel macro sistemi tanıttı. Macro'lar derleme zamanında kod üretir: bir sınıfa annotation eklendiğinde, derleyici otomatik metot/alan ekler.

Önceki yaklaşımlardan farkı: macro'lar derleyici içine gömülüdür; ayrı bir build_runner adımı gerektirmez. Bu, geliştirme döngüsünü hızlandırır.

Henüz deneysel olduğundan API değişebilir. Üretim için source_gen (kod üretimi) hâlâ önerilir; macro'lar gelecek vaat eder.

Annotation ile işaretleme

Macro'lar annotation (üst veri) ile tetiklenir. Bir sınıfa @MyMacro() eklendiğinde, derleyici macro tanımını çalıştırır ve üretilen kodu sınıfa enjekte eder.

Annotation'lar Dart'ta const constructor'a sahip sınıflardır. Örnek: class Generated { const Generated(); }. Sonra @Generated() class Service {}.

Macro'lar olmadan da annotation'lar runtime'da mirrors ile okunabilir; ama bu Flutter/AOT'de çalışmaz.

Uygulama Annotation tanımla ve uygula

class Generated { const Generated(); } annotation sınıfını tanımla. @Generated() ile işaretli class Service {} tanımla. main içinde print(Service().runtimeType); ekle.

Başlangıç kodu

main.dart
void main() {
  // Generated annotation sınıfını tanımla (const constructor)
  // annotation ile işaretli Service sınıfını tanımla
  // Service örneğinin tip adını yazdır
}

Örnek çözüm

main.dart
class Generated {
  const Generated();
}

@Generated()
class Service {}

void main() {
  print(Service().runtimeType);
}

Beklenen çıktı

Service

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Macro'lar ne zaman kod üretir?

  • Çalışma zamanında
  • Derleme zamanında Doğru cevap
  • Yalnızca testte
  • Sunucuda

Açıklama: macro'lar derleme zamanında kod üretir.

2 Yaklaşımları eşleştir

Kavram Anlamı
Macro Derleme zamanı
source_gen Build adımı
dart:mirrors Çalışma zamanı
runtimeType Basit tip

3 Annotation uygula

Soru
@____()
class Service {}
Cevap
@Generated()
class Service {}

Açıklama: @Generated() sınıfa annotation olarak eklenir.

İleri seviye bölümündeki tüm dersler