Reflection
- Dart kursu
- İleri seviye
- Ders 19/83
- 5 dk
dart:mirrors ile reflection öğrenirsin.
Reflection nedir?
Reflection (yansıma), bir programın kendi yapısını çalışma zamanında incelemesidir: sınıf adları, alanlar, metotlar, annotation'lar. Dart'ta dart:mirrors kütüphanesi sağlar.
Örnek kullanımlar: serialization (JSON ↔ nesne), dependency injection, test mock'ları. Ancak dart:mirrors Flutter/AOT'de desteklenmez; bu yüzden çoğu projede kod üretimi (source_gen) tercih edilir.
En basit reflection aracı runtimeType'tır: her nesne kendi tipini bilir. obj.runtimeType ilgili Type nesnesini verir.
runtimeType ile tip bilgisi
Her Dart nesnesi runtimeType özelliğine sahiptir. Bu, nesnenin dinamik tipini verir ve mirrors gerektirmez — her ortamda çalışır.
Örnek: var u = User('Ayşe'); print(u.runtimeType); ekrana User yazar. Bu, en basit reflection biçimidir.
Daha derin inceleme (alan listeleme, dinamik metot çağrısı) için dart:mirrors gerekir; ama runtimeType çoğu debug ve log senaryosuna yeter.
Uygulama runtimeType ile tip yazdır
class User { String name; User(this.name); } sınıfını tanımla. main içinde var u = User('Ayşe'); oluştur ve print(u.runtimeType); ekle.
Başlangıç kodu
void main() {
// User sınıfını tanımla (main dışında)
// örnek oluştur ve tip adını yazdır
}Örnek çözüm
class User {
String name;
User(this.name);
}
void main() {
var u = User('Ayşe');
print(u.runtimeType);
}Beklenen çıktı
User
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 dart:mirrors nerede desteklenmez?
- Dart VM (console)
- Yalnızca web
- Flutter / AOT derleme Doğru cevap
- Test ortamı
Açıklama: dart:mirrors Flutter ve AOT derlemede çalışmaz.
2 Tip bilgisini al
print(u.____);
print(u.runtimeType);
Açıklama: runtimeType nesnenin dinamik tipini verir.
3 Reflection araçlarını eşleştir
| Kavram | Anlamı |
|---|---|
dart:mirrors |
Tam reflection |
runtimeType |
Basit tip bilgisi |
source_gen |
Kod üretimi |
annotation |
Üst veri |