CodeBlanks Logo Icon CodeBlanks

source_gen

source_gen ile kaynak kod üretimi öğrenirsin.

source_gen

source_gen, Builder üzerine kurulu bir çatıdır (framework). Dart kaynak kodunu çözümleyip (analyzer ile) kod üretmek için yüksek seviyeli API sağlar.

İki temel sınıf: Generator (kaynaktan üretilen kodu döndürür) ve GeneratorForAnnotation<T> (yalnızca @T ile işaretli sınıfları işler).

Kullanım: bir annotation tanımla, bir Generator yaz, SharedPartBuilder ile sar, build_runner çalıştır. Üretilen kod .g.dart dosyasına yazılır.

GeneratorForAnnotation

GeneratorForAnnotation<T>, yalnızca @T ile işaretli sınıfları işler. generateForAnnotatedElement metodu her işaretli sınıf için çağrılır.

Metot bir Element (sınıf bilgisi) ve ConstantReader (annotation değerleri) alır. Üretilen kodu String olarak döndürür.

Bu desen, elle fromJson/toJson yazmayı ortadan kaldırır. Annotation eklersin, Generator kodu üretir. json_serializable bu yaklaşımı kullanır.

Uygulama Annotation ve üretici tanımla

class GenAnnotation { const GenAnnotation(); String get name => 'GenAnnotation'; } annotation sınıfını tanımla. String generateFor(GenAnnotation a) => '// generated for ${a.name}'; fonksiyonunu tanımla. main içinde const a = GenAnnotation(); yarat ve print(generateFor(a)); ekle.

Başlangıç kodu

main.dart
void main() {
  // GenAnnotation sınıfını tanımla (const constructor, name getter)
  // generateFor fonksiyonunu tanımla
  // bir annotation yarat; generateFor ile yazdır
}

Örnek çözüm

main.dart
class GenAnnotation {
  const GenAnnotation();
  String get name => 'GenAnnotation';
}

String generateFor(GenAnnotation a) => '// generated for ${a.name}';

void main() {
  const a = GenAnnotation();
  print(generateFor(a));
}

Beklenen çıktı

// generated for GenAnnotation

Soru ve cevaplar

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

1 source_gen parçalarını eşleştir

Kavram Anlamı
Generator Temel sınıf
GeneratorForAnnotation Annotation'lü üretim
@GenAnnotation İşaretleyici
generate(...) Kod üreten metod

2 GeneratorForAnnotation ne yapar?

  • YAML çözümler
  • Doğrudan .g.dart yazar
  • analyzer'ı çalıştırır
  • Annotation'lü sınıflar için kod üretir Doğru cevap

Açıklama: GeneratorForAnnotation yalnızca annotation'lü sınıfları işler.

3 Generator kalıtımı

Soru
class MyGenerator extends ____<GenAnnotation> { }
Cevap
class MyGenerator extends GeneratorForAnnotation<GenAnnotation> { }

Açıklama: GeneratorForAnnotation annotation tabanlı üretim sağlar.

Uzman bölümündeki tüm dersler