CodeBlanks Logo Icon CodeBlanks

Generic extension

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

main.dart
void main() {
  // ListMiddle<T> extension'ını tanımla (on List<T>; middleOrNull)
  // [1, 2, 3].middleOrNull() yazdır
}

Örnek çözüm

main.dart
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ı

Soru
extension ListFirst<____> on List<T> {
  T? firstOrNull() => isEmpty ? null : first;
}
Cevap
extension ListFirst<T> on List<T> {
  T? firstOrNull() => isEmpty ? null : first;
}

Açıklama: extension ListFirst<T> generic tür parametresi alır.

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