CodeBlanks Logo Icon CodeBlanks

Code generation

source_gen ile kod üretimini öğrenirsin.

source_gen ile kod üretimi

source_gen, Dart kodundan Dart kod üreten bir pakettir. build_runner ile çalışır; derleme öncesi bir adımda .g.dart dosyaları oluşturur.

Reflection'ın yerine geçer: annotation'ları okur, ilgili sınıf için serialization/mapper kodu üretir. Çalışma zamanında maliyet yoktur; her şey derleme öncesi hazırdır.

Yaygın kullanım: json_serializable (JSON ↔ sınıf), freezed (değiştirilemez veri sınıfları), mockito (mock üretimi).

Generator sınıfı

Bir source_gen üreteci Generator soyut sınıfını uygular: generate(LibraryReader, BuildStep) metodu bir String (Dart kodu) döndürür.

Generator, analyzer paketiyle kaynak kodu okur (AST), annotation'ları bulur ve ilgili sınıf için metot/alan üretir.

Üretilen dosya .g.dart uzantısına sahiptir ve orijinal dosyanın yanına yazılır. part direktifi ile kaynak dosyaya eklenir.

Uygulama Basit kod üreteci simülasyonu

class FieldGen { final String name; FieldGen(this.name); String build() => 'final String $name;'; } sınıfını tanımla. main içinde var g = FieldGen('title'); oluştur ve print(g.build()); ekle.

Başlangıç kodu

main.dart
void main() {
  // FieldGen sınıfını tanımla (main dışında)
  // örnek oluştur ve build() çıktısını yazdır
}

Örnek çözüm

main.dart
class FieldGen {
  final String name;
  FieldGen(this.name);
  String build() => 'final String $name;';
}

void main() {
  var g = FieldGen('title');
  print(g.build());
}

Beklenen çıktı

final String title;

Soru ve cevaplar

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

1 Build komutu

Soru
dart run ____ build
Cevap
dart run build_runner build

Açıklama: build_runner kod üretimini çalıştırır.

2 Araçları eşleştir

Kavram Anlamı
source_gen Kod üretimi
build_runner Build adımı
analyzer AST okuma
.g.dart Üretilen dosya

3 source_gen ne zaman çalışır?

  • Çalışma zamanında
  • Yalnızca sunucuda
  • Derleme öncesi build adımında Doğru cevap
  • Yalnızca testte

Açıklama: source_gen build_runner ile derleme öncesi çalışır.

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