CodeBlanks Logo Icon CodeBlanks

Generic vs dynamic

Generic ve dynamic farkını öğrenirsin.

Generic vs dynamic

Generic, türü derleme zamanında sabitler; dynamic ise türü çalışma zamanına bırakır. İkisi de esneklik verir ama güvenlik düzeyi farklıdır.

List<int> bildirdiğinde derleyici, listenin yalnızca int tuttuğunu bilir; list.add('a') derleme hatasıdır. List<dynamic> bildirdiğinde ise her tür eklenebilir; hata ancak çalışma zamanında, erişim sırasında ortaya çıkar. Generic, hatayı erkenden yakalar; dynamic esnek ama risklidir. Kodun korunabilirliği için generic tercih edilir.

Hangisini ne zaman?

Generic, koleksiyonlar ve yardımcı metotlar için varsayılan seçimdir; tür güvenliği ve okunabilirlik sağlar. List<int>, Map<String, int> gibi bildirimler hatayı derleme aşamasında gösterir.

dynamic ise türün önceden bilinmediği durumlar içindir: harici veri kaynakları, yansıma (reflection) veya geçici prototip kodlar. Ama production kodunda dynamic son çare olmalıdır. Generic, derleyiciye ve okuyucuya sözleşme verir; dynamic bu sözleşmeyi kaldırır. Doğru seçim, güvenliği koruyan generic'dir.

Uygulama Generic pick<T> metodunu yaz

T pick<T>(List<T> items, int i) adında bir generic metot tanımla; gövdesi return items[i]; olsun. main içinde print(pick<int>([1, 2, 3], 1)); çağrısı yap.

Başlangıç kodu

main.dart
// pick<T> metodunu tanımla

void main() {
  // pick<int>([1, 2, 3], 1) çağır ve yazdır
}

Örnek çözüm

main.dart
// pick<T> metodunu tanımla
T pick<T>(List<T> items, int i) {
  return items[i];
}

void main() {
  print(pick<int>([1, 2, 3], 1));
}

Beklenen çıktı

2

Soru ve cevaplar

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

1 Generic ve dynamic özelliklerini eşle

Kavram Anlamı
Generic Derleme zamanı güvenlik
dynamic Çalışma zamanı kontrol
List<int> Tür sabit

2 Tür güvenli liste oluştur

Soru
var ages = <____>[28, 30];
print(ages[0]);
Cevap
var ages = <int>[28, 30];
print(ages[0]);

Açıklama: <int>[28, 30] tür güvenli bir List<int> üretir.

3 Hangisi daha güvenlidir?

  • List<dynamic>
  • List<int> Doğru cevap
  • dynamic x
  • var x = 5

Açıklama: List<int> türü derleme zamanında sabittir; en güvenli seçimdir.

Orta seviye bölümündeki tüm dersler