CodeBlanks Logo Icon CodeBlanks

Özet - Metaprogramming

reflection, mirrors ve source_gen'i birleştirerek bir kod üreteci yazarsın.

Özet - Metaprogramming

Bu grupta Dart'ın metaprogramming araçlarını inceledik: dart:mirrors (çalışma zamanı reflection), runtimeType (basit tip bilgisi), Function.apply (dinamik çağrı), macro (Dart 3, derleme zamanı), source_gen (build adımı kod üretimi).

Pratik tercih: Flutter/AOT için source_gen (json_serializable, freezed); Dart VM için dart:mirrors; gelecek için macro.

Her aracın maliyeti farklıdır: mirrors runtime'da yavaştır, source_gen derleme öncesi maliyet getirir ama runtime'da ücretsizdir.

Uygulama Özet: Function.apply ile kare

Top-level int square(int x) => x * x; fonksiyonunu tanımla. main içinde var r = Function.apply(square, [5]); ve print(r); ekle.

Başlangıç kodu

main.dart
void main() {
  // square fonksiyonunu tanımla (main dışında)
  // Function.apply ile square(5) çağrısı ekle; yazdır
}

Örnek çözüm

main.dart
int square(int x) => x * x;

void main() {
  var r = Function.apply(square, [5]);
  print(r);
}

Beklenen çıktı

25

Soru ve cevaplar

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

1 Flutter için en iyi seçenek?

  • manuel kod
  • dart:mirrors
  • sadece runtimeType
  • source_gen Doğru cevap

Açıklama: source_gen Flutter/AOT'de çalışır ve runtime maliyeti yoktur.

2 Araçları eşleştir

Kavram Anlamı
dart:mirrors Runtime reflection
source_gen Build adımı
Function.apply Dinamik çağrı
runtimeType Tip bilgisi

3 Dinamik fonksiyon çağrısı

Soru
var r = ____(add, [3, 4]);
Cevap
var r = Function.apply(add, [3, 4]);

Açıklama: Function.apply add(3,4) ile eşittir.

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