Type system
- Dart kursu
- Uzman
- Ders 3/47
- 5 dk
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
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
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
class Box<T> {
final T value;
Box(this.value);
}
void main() {
final box = Box<____>(42);
print(box.value);
}
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.