Generic extension
- Dart kursu
- Uzman
- Ders 22/47
- 5 dk
Generic extension yazmayı öğrenirsin.
Generic extension
Generic extension, tür parametresi alabilen extension'dır. extension ListFirst<T> on List<T> { T? firstOrNull() => isEmpty ? null : first; } tanımı, herhangi bir listenin ilk elemanını güvenli biçimde alır.
Generic extension, tür güvenliğini korur: [1, 2].firstOrNull() int?, ['a'].firstOrNull() String? döndürür. Tür parametresi T, hedef türden çıkarılır.
Tür çıkarımı
Generic extension'da tür parametresi, hedeften otomatik çıkarılır. extension BoxUnwrap<T> on Box<T> { T unwrap() => value; } tanımında Box<int> üzerinde çağrıldığında T int olur.
Tür parametresi açıkça da belirtilebilir: box<int>.unwrap(). Ancak çoğu durumda çıkarım yeterlidir. Generic extension'lar, generic sınıflara veya generic türlere işlev eklemek için idealdir.
Uygulama ListMiddle extension
Bir ListMiddle<T> extension'ı tanımla: on List<T> olsun ve T? middleOrNull() => isEmpty ? null : this[length ~/ 2]; metodu içersin. main içinde print([1, 2, 3].middleOrNull()); çağrısını ekle.
Başlangıç kodu
void main() {
// ListMiddle<T> extension'ını tanımla (on List<T>; middleOrNull)
// [1, 2, 3].middleOrNull() yazdır
}Örnek çözüm
extension ListMiddle<T> on List<T> {
T? middleOrNull() => isEmpty ? null : this[length ~/ 2];
}
void main() {
print([1, 2, 3].middleOrNull());
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Generic extension ne sağlar?
- Sadece int için işlev
- Sadece String için işlev
- Tür güvenli çoklu tür işlevi Doğru cevap
- Çalışma anı tür denetimi
Açıklama: generic extension birden çok türle tür güvenli çalışır.
2 Generic extension parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
<T> |
Tür parametresi |
on List<T> |
Hedef tür |
T? |
Nullable dönüş |
first |
İlk eleman |
3 Generic extension tanımı
extension ListFirst<____> on List<T> {
T? firstOrNull() => isEmpty ? null : first;
}
extension ListFirst<T> on List<T> {
T? firstOrNull() => isEmpty ? null : first;
}
Açıklama: extension ListFirst<T> generic tür parametresi alır.