Code generation
- Dart kursu
- İleri seviye
- Ders 23/83
- 5 dk
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
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
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
dart run ____ build
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.