CodeBlanks Logo Icon CodeBlanks

Type system

Dart type system ve variance öğrenirsin.

Type system

Dart'ın type system'i statik ve sağlamdır (sound): her ifadenin derleme anında bilinen bir türü vardır. Object tüm nesnelerin üst türüdür, dynamic ise tür denetimini çalışma anına bırakır.

Generic türler (List<int>, Map<String, int>) aynı kapsayıcının farklı türlerle kullanılmasını sağlar. Variance ilkeleri (covariance, contravariance) generic türlerin alt tür ilişkilerini düzenler.

Generic türler

Generic türler, bir sınıf ya da fonksiyonun farklı türlerle çalışmasını sağlar. class Box<T> { final T value; Box(this.value); } tanımı Box<int>, Box<String> gibi kullanımlara izin verir.

T tür parametresi, kullanıldığı yere göre yer değiştirilir. Genericler kod tekrarını azaltır ve tür güvenliğini korur: Box<int>'tan String çıkarmaya çalışmak derleme hatasıdır.

Uygulama Generic Box sınıfı

Bir Box<T> generic sınıfı tanımla: final T value; alanı, Box(this.value); kurucusu ve T unwrap() => value; metodu. main içinde final box = Box<String>('Merhaba'); yarat; print(box.unwrap()); ile sonuçu yazdır.

Başlangıç kodu

main.dart
void main() {
  // Box<T> generic sınıfını tanımla (value alanı; unwrap metodu)
  // bir Box<String> yarat; unwrap() sonuçunu yazdır
}

Örnek çözüm

main.dart
class Box<T> {
  final T value;
  Box(this.value);
  T unwrap() => value;
}

void main() {
  final box = Box<String>('Merhaba');
  print(box.unwrap());
}

Beklenen çıktı

Merhaba

Soru ve cevaplar

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

1 Type system kavramlarını eşleştir

Kavram Anlamı
Object Tüm nesnelerin üst türü
dynamic Çalışma anı denetim
List<int> Tamsayı listesi
Map<String, int> Anahtar-değer eşlemesi

2 dynamic ile Object farkı nedir?

  • İkisi de aynıdır
  • dynamic yalnızca sayı tutar
  • Object yalnızca sınıf örnekleri tutar
  • dynamic tüm tür denetimlerini çalışma anına bırakır Doğru cevap

Açıklama: Object derleme anında denetler.

3 Generic Box bildirimi

Soru
class Box<T> {
  final T value;
  Box(this.value);
}

void main() {
  final box = Box<____>(42);
  print(box.value);
}
Cevap
class Box<T> {
  final T value;
  Box(this.value);
}

void main() {
  final box = Box<int>(42);
  print(box.value);
}

Açıklama: Box<int> tamsayı kutusu oluşturur ve value 42 döner.

Uzman bölümündeki tüm dersler